tcp-chat/src/network/socket.c

47 lines
1.3 KiB
C
Executable File

#include "network.h"
#include "network.h"
#include "socket.h"
Result(Socket) socket_open_TCP(){
Socket s = socket(AF_INET, SOCK_STREAM, 0);
if(s == -1){
return RESULT_ERROR("can't create socket", false);
}
return RESULT_VALUE(i64, s);
}
void socket_close(Socket s){
#if KN_USE_WINSOCK
closesocket(s);
#else
close(s);
#endif
}
Result(void) socket_shutdown(Socket s, SocketShutdownType direction){
if(shutdown(s, (int)direction) == -1)
return RESULT_ERROR("shutdown() failed", false);
return RESULT_VOID;
}
Result(void) socket_bind(Socket s, EndpointIPv4 local_end){
struct sockaddr_in sockaddr = EndpointIPv4_toSockaddr(local_end);
if(bind(s, (void*)&sockaddr, sizeof(sockaddr)) != 0)
return RESULT_ERROR("bind() failed", false);
return RESULT_VOID;
}
Result(void) socket_listen(Socket s, i32 backlog){
if(listen(s, backlog) != 0)
return RESULT_ERROR("listen() failed", false);
return RESULT_VOID;
}
Result(Socket) socket_accept(Socket main_socket) {
struct sockaddr_in remote_addr = {0};
i32 sockaddr_size = sizeof(remote_addr);
Socket user_connection = accept(main_socket, (struct sockaddr*)&remote_addr, (void*)&sockaddr_size);
return RESULT_VALUE(i64, user_connection);
}