MCPcopy Create free account
hub / github.com/brainflow-dev/brainflow / bind

Method bind

src/utils/socket_server_tcp.cpp:24–74  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22}
23
24int SocketServerTCP::bind ()
25{
26 if (wsa_initialized)
27 {
28 return (int)SocketServerTCPReturnCodes::SOCKET_ALREADY_CREATED_ERROR;
29 }
30 WSADATA wsadata;
31 int res = WSAStartup (MAKEWORD (2, 2), &wsadata);
32 if (res != 0)
33 {
34 return (int)SocketServerTCPReturnCodes::WSA_STARTUP_ERROR;
35 }
36 wsa_initialized = true;
37 server_addr.sin_family = AF_INET;
38 server_addr.sin_port = htons (local_port);
39 if (inet_pton (AF_INET, local_ip, &server_addr.sin_addr) == 0)
40 {
41 return (int)SocketServerTCPReturnCodes::PTON_ERROR;
42 }
43 server_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
44 if (server_socket == INVALID_SOCKET)
45 {
46 return (int)SocketServerTCPReturnCodes::CREATE_SOCKET_ERROR;
47 }
48
49 if (::bind (server_socket, (const struct sockaddr *)&server_addr, sizeof (server_addr)) != 0)
50 {
51 return (int)SocketServerTCPReturnCodes::CONNECT_ERROR;
52 }
53
54 // ensure that library will not hang in blocking recv/send call
55 DWORD timeout = 3000;
56 DWORD value = 1;
57 DWORD buf_size = 65536 * 4;
58 setsockopt (server_socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&value, sizeof (value));
59 setsockopt (server_socket, SOL_SOCKET, SO_RCVTIMEO, (const char *)&timeout, sizeof (timeout));
60 setsockopt (server_socket, SOL_SOCKET, SO_SNDTIMEO, (const char *)&timeout, sizeof (timeout));
61 setsockopt (server_socket, SOL_SOCKET, SO_RCVBUF, (const char *)&buf_size, sizeof (buf_size));
62 // set linger timeout to 1s to handle time_wait state gracefully
63 struct linger sl;
64 sl.l_onoff = 1;
65 sl.l_linger = 1;
66 setsockopt (server_socket, SOL_SOCKET, SO_LINGER, (const char *)&sl, sizeof (sl));
67
68 if ((listen (server_socket, 1)) != 0)
69 {
70 return (int)SocketServerTCPReturnCodes::CONNECT_ERROR;
71 }
72
73 return (int)SocketServerTCPReturnCodes::STATUS_OK;
74}
75
76int SocketServerTCP::accept ()
77{

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected