Mercurial > hg > octave-lojdl > gnulib-hg
comparison lib/setsockopt.c @ 15727:144db791c6fa
Ensure EBADF returns for socket functions on mingw.
* lib/accept.c (rpl_accept): Fail with error EBADF if the file
descriptor is invalid.
* lib/bind.c (rpl_bind): Likewise.
* lib/connect.c (rpl_connect): Likewise.
* lib/getpeername.c (rpl_getpeername): Likewise.
* lib/getsockname.c (rpl_getsockname): Likewise.
* lib/getsockopt.c (rpl_getsockopt): Likewise.
* lib/listen.c (rpl_listen): Likewise.
* lib/recv.c (rpl_recv): Likewise.
* lib/recvfrom.c (rpl_recvfrom): Likewise.
* lib/send.c (rpl_send): Likewise.
* lib/sendto.c (rpl_sendto): Likewise.
* lib/setsockopt.c (rpl_setsockopt): Likewise.
* lib/shutdown.c (rpl_shutdown): Likewise.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Wed, 21 Sep 2011 00:20:59 +0200 |
parents | 97fc9a21a8fb |
children | 8250f2777afc |
comparison
equal
deleted
inserted
replaced
15726:1a3894d5ce47 | 15727:144db791c6fa |
---|---|
32 #undef setsockopt | 32 #undef setsockopt |
33 | 33 |
34 int | 34 int |
35 rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) | 35 rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) |
36 { | 36 { |
37 SOCKET sock = FD_TO_SOCKET (fd); | |
37 int r; | 38 int r; |
38 SOCKET sock = FD_TO_SOCKET (fd); | |
39 | 39 |
40 if (level == SOL_SOCKET && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) | 40 if (sock == INVALID_SOCKET) |
41 { | 41 { |
42 const struct timeval *tv = optval; | 42 errno = EBADF; |
43 int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; | 43 return -1; |
44 optval = &milliseconds; | |
45 r = setsockopt (sock, level, optname, optval, sizeof (int)); | |
46 } | 44 } |
47 else | 45 else |
48 { | 46 { |
49 r = setsockopt (sock, level, optname, optval, optlen); | 47 if (level == SOL_SOCKET |
48 && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) | |
49 { | |
50 const struct timeval *tv = optval; | |
51 int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; | |
52 optval = &milliseconds; | |
53 r = setsockopt (sock, level, optname, optval, sizeof (int)); | |
54 } | |
55 else | |
56 { | |
57 r = setsockopt (sock, level, optname, optval, optlen); | |
58 } | |
59 | |
60 if (r < 0) | |
61 set_winsock_errno (); | |
62 | |
63 return r; | |
50 } | 64 } |
51 | |
52 if (r < 0) | |
53 set_winsock_errno (); | |
54 | |
55 return r; | |
56 } | 65 } |