#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); }