47 lines
1.3 KiB
C
Executable File
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);
|
|
}
|