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