Ruby 1.9.3p327(2012-11-10revision37606)
|
00001 /* Ignore ECONNRESET of FreeBSD */ 00002 #include "ruby/missing.h" 00003 #include <errno.h> 00004 #include <unistd.h> 00005 #include <sys/types.h> 00006 #include <sys/socket.h> 00007 00008 #undef getpeername 00009 int 00010 ruby_getpeername(int s, struct sockaddr * name, 00011 socklen_t * namelen) 00012 { 00013 int err = errno; 00014 errno = 0; 00015 s = getpeername(s, name, namelen); 00016 if (errno == ECONNRESET) { 00017 errno = 0; 00018 s = 0; 00019 } 00020 else if (errno == 0) 00021 errno = err; 00022 return s; 00023 } 00024 00025 #undef getsockname 00026 int 00027 ruby_getsockname(int s, struct sockaddr * name, 00028 socklen_t * namelen) 00029 { 00030 int err = errno; 00031 errno = 0; 00032 s = getsockname(s, name, namelen); 00033 if (errno == ECONNRESET) { 00034 errno = 0; 00035 s = 0; 00036 } 00037 else if (errno == 0) 00038 errno = err; 00039 return s; 00040 } 00041 00042 #undef shutdown 00043 int 00044 ruby_shutdown(int s, int how) 00045 { 00046 int err = errno; 00047 errno = 0; 00048 s = shutdown(s, how); 00049 if (errno == ECONNRESET) { 00050 errno = 0; 00051 s = 0; 00052 } 00053 else if (errno == 0) 00054 errno = err; 00055 return s; 00056 } 00057 00058 #undef close 00059 int 00060 ruby_close(int s) 00061 { 00062 int err = errno; 00063 errno = 0; 00064 s = close(s); 00065 if (errno == ECONNRESET) { 00066 errno = 0; 00067 s = 0; 00068 } 00069 else if (errno == 0) 00070 errno = err; 00071 return s; 00072 } 00073