Ruby 1.9.2p136(2010-12-25revision30365)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

# missing/close.c

Go to the documentation of this file.

    00001 /* Ignore ECONNRESET of FreeBSD */
    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