18
18
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19
19
* KIND, either express or implied.
21
* $Id: connect.c,v 1.219 2009-05-07 20:02:51 bagder Exp $
21
* $Id: connect.c,v 1.223 2009-10-01 07:59:45 bagder Exp $
22
22
***************************************************************************/
177
177
return timeout_ms;
182
* Curl_nonblock() set the given socket to either blocking or non-blocking
183
* mode based on the 'nonblock' boolean argument. This function is highly
186
int Curl_nonblock(curl_socket_t sockfd, /* operate on this */
187
int nonblock /* TRUE or FALSE */)
189
#if defined(USE_BLOCKING_SOCKETS)
191
return 0; /* returns success */
193
#elif defined(HAVE_FCNTL_O_NONBLOCK)
195
/* most recent unix versions */
197
flags = fcntl(sockfd, F_GETFL, 0);
198
if(FALSE != nonblock)
199
return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
201
return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK));
203
#elif defined(HAVE_IOCTL_FIONBIO)
205
/* older unix versions */
208
return ioctl(sockfd, FIONBIO, &flags);
210
#elif defined(HAVE_IOCTLSOCKET_FIONBIO)
215
return ioctlsocket(sockfd, FIONBIO, &flags);
217
#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO)
220
return IoctlSocket(sockfd, FIONBIO, (long)nonblock);
222
#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK)
225
long b = nonblock ? 1 : 0;
226
return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
229
# error "no non-blocking method was found/used/set"
234
181
* waitconnect() waits for a TCP connect on the given socket for the specified
235
182
* number if milliseconds. It returns:
330
277
* hostname or ip address.
332
279
if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
333
dev, strlen(dev)+1) != 0) {
280
dev, (curl_socklen_t)strlen(dev)+1) != 0) {
334
281
error = SOCKERRNO;
335
282
infof(data, "SO_BINDTODEVICE %s failed with errno %d: %s;"
336
283
" will do regular bind\n",
717
664
void Curl_sndbufset(curl_socket_t sockfd)
719
666
int val = CURL_MAX_WRITE_SIZE + 32;
668
int curlen = sizeof(curval);
670
if (getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&curval, &curlen) == 0)
720
674
setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&val, sizeof(val));
848
802
/* set socket non-blocking */
849
Curl_nonblock(sockfd, TRUE);
803
curlx_nonblock(sockfd, TRUE);
851
805
/* Connect TCP sockets, bind UDP */
852
806
if(conn->socktype == SOCK_STREAM)