diff options
Diffstat (limited to 'otherlibs/win32unix/sockopt.c')
-rw-r--r-- | otherlibs/win32unix/sockopt.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/otherlibs/win32unix/sockopt.c b/otherlibs/win32unix/sockopt.c new file mode 100644 index 000000000..1cda657ed --- /dev/null +++ b/otherlibs/win32unix/sockopt.c @@ -0,0 +1,42 @@ +/***********************************************************************/ +/* */ +/* Objective Caml */ +/* */ +/* Xavier Leroy and Pascal Cuoq, projet Cristal, INRIA Rocquencourt */ +/* */ +/* Copyright 1996 Institut National de Recherche en Informatique et */ +/* Automatique. Distributed only by permission. */ +/* */ +/***********************************************************************/ + +/* $Id$ */ + +#include <mlvalues.h> +#include "unixwin.h" +#include <winsock.h> +#include <sys/types.h> + +static int sockopt[] = { + SO_DEBUG, SO_BROADCAST, SO_REUSEADDR, SO_KEEPALIVE, + SO_DONTROUTE, SO_OOBINLINE }; + +value unix_getsockopt(socket, option) + value socket, option; +{ + int optval, optsize; + optsize = sizeof(optval); + if (getsockopt(_get_osfhandle(Int_val(socket)), SOL_SOCKET, + sockopt[Int_val(option)], &optval, &optsize) == -1) + uerror("getsockopt", Nothing); + return Val_int(optval); +} + +value unix_setsockopt(socket, option, status) + value socket, option, status; +{ + int optval = Int_val(status); + if (setsockopt(_get_osfhandle(Int_val(socket)), SOL_SOCKET, + sockopt[Int_val(option)], &optval, sizeof(optval)) == -1) + uerror("setsockopt", Nothing); + return Val_unit; +} |