X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fsockets.c;h=27ee96d4e3cbeba0b137e8d18d12033a1a3a7f53;hb=a416234759cedbe7b6bbd153c5cc8a4712ea1f05;hp=817b8478105edd703c9c2663eec19c47c58b1c53;hpb=f78e6f8fee273c6c80c8c36e7e1b2bbd8392b8cb;p=mono.git diff --git a/mono/io-layer/sockets.c b/mono/io-layer/sockets.c index 817b8478105..27ee96d4e3c 100644 --- a/mono/io-layer/sockets.c +++ b/mono/io-layer/sockets.c @@ -335,7 +335,8 @@ int _wapi_connect(guint32 fd, const struct sockaddr *serv_addr, (gpointer *)&socket_handle); if (ok == FALSE) { /* ECONNRESET means the socket was closed by another thread */ - if (errnum != WSAECONNRESET) + /* Async close on mac raises ECONNABORTED. */ + if (errnum != WSAECONNRESET && errnum != WSAENETDOWN) g_warning ("%s: error looking up socket handle %p (error %d)", __func__, handle, errnum); } else { socket_handle->saved_error = errnum; @@ -777,6 +778,7 @@ int _wapi_setsockopt(guint32 fd, int level, int optname, gpointer handle = GUINT_TO_POINTER (fd); int ret; const void *tmp_val; + int bufsize = 0; struct timeval tv; if (startup_count == 0) { @@ -804,7 +806,7 @@ int _wapi_setsockopt(guint32 fd, int level, int optname, * buffer sizes "to allow space for bookkeeping * overhead." */ - int bufsize = *((int *) optval); + bufsize = *((int *) optval); bufsize /= 2; tmp_val = &bufsize; @@ -901,6 +903,7 @@ guint32 _wapi_socket(int domain, int type, int protocol, void *unused, if (fd == -1 && domain == AF_INET && type == SOCK_RAW && protocol == 0) { /* Retry with protocol == 4 (see bug #54565) */ + // https://bugzilla.novell.com/show_bug.cgi?id=MONO54565 socket_handle.protocol = 4; fd = socket (AF_INET, SOCK_RAW, 4); } @@ -926,6 +929,7 @@ guint32 _wapi_socket(int domain, int type, int protocol, void *unused, /* .net seems to set this by default for SOCK_STREAM, not for * SOCK_DGRAM (see bug #36322) + * https://bugzilla.novell.com/show_bug.cgi?id=MONO36322 * * It seems winsock has a rather different idea of what * SO_REUSEADDR means. If it's set, then a new socket can be @@ -936,6 +940,7 @@ guint32 _wapi_socket(int domain, int type, int protocol, void *unused, * behaves as though any other system would when SO_REUSEADDR * is true, so we don't need to do anything else here. See * bug 53992. + * https://bugzilla.novell.com/show_bug.cgi?id=MONO53992 */ { int ret, true = 1; @@ -1290,13 +1295,13 @@ WSAIoctl (guint32 fd, gint32 command, keepalivetime /= 1000; if (keepalivetime == 0 || rem >= 500) keepalivetime++; - ret = setsockopt (fd, SOL_TCP, TCP_KEEPIDLE, &keepalivetime, sizeof (uint32_t)); + ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepalivetime, sizeof (uint32_t)); if (ret == 0) { rem = keepaliveinterval % 1000; keepaliveinterval /= 1000; if (keepaliveinterval == 0 || rem >= 500) keepaliveinterval++; - ret = setsockopt (fd, SOL_TCP, TCP_KEEPINTVL, &keepaliveinterval, sizeof (uint32_t)); + ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPINTVL, &keepaliveinterval, sizeof (uint32_t)); } if (ret != 0) { gint errnum = errno;