MCPcopy Create free account
hub / github.com/defold/defold / socket_connect

Function socket_connect

engine/script/src/luasocket/wsocket.c:122–146  ·  view source on GitHub ↗

-------------------------------------------------------------------------*\ * Connects or returns error message \*-------------------------------------------------------------------------*/

Source from the content-addressed store, hash-verified

120* Connects or returns error message
121\*-------------------------------------------------------------------------*/
122int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
123 int err;
124 /* don't call on closed socket */
125 if (*ps == SOCKET_INVALID) return IO_CLOSED;
126 /* ask system to connect */
127 if (connect(*ps, addr, len) == 0) return IO_DONE;
128 /* make sure the system is trying to connect */
129 err = WSAGetLastError();
130 if (err != WSAEWOULDBLOCK && err != WSAEINPROGRESS) return err;
131 /* zero timeout case optimization */
132 if (timeout_iszero(tm)) return IO_TIMEOUT;
133 /* we wait until something happens */
134 err = socket_waitfd(ps, WAITFD_C, tm);
135 if (err == IO_CLOSED) {
136 int len = sizeof(err);
137 /* give windows time to set the error (yes, disgusting) */
138 Sleep(10);
139 /* find out why we failed */
140 getsockopt(*ps, SOL_SOCKET, SO_ERROR, (char *)&err, &len);
141 /* we KNOW there was an error. if 'why' is 0, we will return
142 * "unknown error", but it's not really our fault */
143 return err > 0? err: IO_UNKNOWN;
144 } else return err;
145
146}
147
148/*-------------------------------------------------------------------------*\
149* Binds or returns error message

Callers 4

tryconnect6Function · 0.70
unix_tryconnectFunction · 0.70
inet_trydisconnectFunction · 0.70
inet_tryconnectFunction · 0.70

Calls 3

connectFunction · 0.85
socket_waitfdFunction · 0.70
SleepFunction · 0.50

Tested by

no test coverage detected