mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 2f2b6ace05
			
		
	
	
		2f2b6ace05
		
	
	
	
	
		
			
			"shutdown" to prevent infinite recursion. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Ignore ECONNRESET of FreeBSD */
 | |
| #include "ruby/missing.h"
 | |
| #include <errno.h>
 | |
| #include <unistd.h>
 | |
| #include <sys/types.h>
 | |
| #include <sys/socket.h>
 | |
| 
 | |
| #undef getpeername
 | |
| int
 | |
| ruby_getpeername(int s, struct sockaddr * name,
 | |
|          socklen_t * namelen)
 | |
| {
 | |
|     int err = errno;
 | |
|     errno = 0;
 | |
|     s = getpeername(s, name, namelen);
 | |
|     if (errno == ECONNRESET) {
 | |
| 	errno = 0;
 | |
| 	s = 0;
 | |
|     }
 | |
|     else if (errno == 0)
 | |
| 	errno = err;
 | |
|     return s;
 | |
| }
 | |
| 
 | |
| #undef getsockname
 | |
| int
 | |
| ruby_getsockname(int s, struct sockaddr * name,
 | |
|          socklen_t * namelen)
 | |
| {
 | |
|     int err = errno;
 | |
|     errno = 0;
 | |
|     s = getsockname(s, name, namelen);
 | |
|     if (errno == ECONNRESET) {
 | |
| 	errno = 0;
 | |
| 	s = 0;
 | |
|     }
 | |
|     else if (errno == 0)
 | |
| 	errno = err;
 | |
|     return s;
 | |
| }
 | |
| 
 | |
| #undef shutdown
 | |
| int
 | |
| ruby_shutdown(int s, int how)
 | |
| {
 | |
|     int err = errno;
 | |
|     errno = 0;
 | |
|     s = shutdown(s, how);
 | |
|     if (errno == ECONNRESET) {
 | |
| 	errno = 0;
 | |
| 	s = 0;
 | |
|     }
 | |
|     else if (errno == 0)
 | |
| 	errno = err;
 | |
|     return s;
 | |
| }
 | |
| 
 | |
| #undef close
 | |
| int
 | |
| ruby_close(int s)
 | |
| {
 | |
|     int err = errno;
 | |
|     errno = 0;
 | |
|     s = close(s);
 | |
|     if (errno == ECONNRESET) {
 | |
| 	errno = 0;
 | |
| 	s = 0;
 | |
|     }
 | |
|     else if (errno == 0)
 | |
| 	errno = err;
 | |
|     return s;
 | |
| }
 |