[patch] making SO_???TIMEO work on linux
Jindrich Makovicka
makovick at kmlinux.fjfi.cvut.cz
Fri Oct 11 09:58:00 GMT 2002
Hello,
This patch modifies util_sock.c/set_socket_options to pass timeval
argument instead of integer to setsockopt which is necessary to make it
work under linux, at least the 2.4 kernel.
--
Jindrich Makovicka
-------------- next part --------------
--- util_sock.c.orig Fri May 3 03:03:12 2002
+++ util_sock.c Fri Aug 2 22:02:42 2002
@@ -47,7 +47,7 @@
return(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&v, &l) == 0);
}
-enum SOCK_OPT_TYPES {OPT_BOOL,OPT_INT,OPT_ON};
+enum SOCK_OPT_TYPES {OPT_BOOL,OPT_INT,OPT_ON,OPT_TIMEVAL};
typedef struct smb_socket_option {
char *name;
@@ -86,10 +86,10 @@
{"SO_RCVLOWAT", SOL_SOCKET, SO_RCVLOWAT, 0, OPT_INT},
#endif
#ifdef SO_SNDTIMEO
- {"SO_SNDTIMEO", SOL_SOCKET, SO_SNDTIMEO, 0, OPT_INT},
+ {"SO_SNDTIMEO", SOL_SOCKET, SO_SNDTIMEO, 0, OPT_TIMEVAL},
#endif
#ifdef SO_RCVTIMEO
- {"SO_RCVTIMEO", SOL_SOCKET, SO_RCVTIMEO, 0, OPT_INT},
+ {"SO_RCVTIMEO", SOL_SOCKET, SO_RCVTIMEO, 0, OPT_TIMEVAL},
#endif
{NULL,0,0,0,0}};
@@ -117,6 +117,7 @@
void set_socket_options(int fd, char *options)
{
+ struct timeval tv;
fstring tok;
while (next_token(&options,tok," \t,", sizeof(tok))) {
@@ -145,6 +146,12 @@
case OPT_INT:
ret = setsockopt(fd,socket_options[i].level,
socket_options[i].option,(char *)&value,sizeof(int));
+ break;
+ case OPT_TIMEVAL:
+ tv.tv_sec = value;
+ tv.tv_usec = 0;
+ ret = setsockopt(fd,socket_options[i].level,
+ socket_options[i].option,&tv,sizeof(tv));
break;
case OPT_ON:
More information about the samba-technical
mailing list