Changeset 6904
- Timestamp:
- Oct 14, 2008, 6:17:33 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/trevent.c
r6893 r6904 20 20 21 21 #ifdef WIN32 22 #include <fcntl.h> 23 #define pipe( f ) _pipe( f, 1000, _O_BINARY ) 22 23 #include <WinSock2.h> 24 25 static int 26 pgpipe( int handles[2] ) 27 { 28 SOCKET s; 29 struct sockaddr_in serv_addr; 30 int len = sizeof( serv_addr ); 31 32 handles[0] = handles[1] = INVALID_SOCKET; 33 34 if ( ( s = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET ) 35 { 36 /* ereport(LOG, (errmsg_internal("pgpipe failed to create socket: %ui", WSAGetLastError()))); */ 37 return -1; 38 } 39 40 memset( &serv_addr, 0, sizeof( serv_addr ) ); 41 serv_addr.sin_family = AF_INET; 42 serv_addr.sin_port = htons(0); 43 serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 44 if (bind(s, (SOCKADDR *) & serv_addr, len) == SOCKET_ERROR) 45 { 46 /* ereport(LOG, (errmsg_internal("pgpipe failed to bind: %ui", WSAGetLastError()))); */ 47 closesocket(s); 48 return -1; 49 } 50 if (listen(s, 1) == SOCKET_ERROR) 51 { 52 /* ereport(LOG, (errmsg_internal("pgpipe failed to listen: %ui", WSAGetLastError()))); */ 53 closesocket(s); 54 return -1; 55 } 56 if (getsockname(s, (SOCKADDR *) & serv_addr, &len) == SOCKET_ERROR) 57 { 58 /* ereport(LOG, (errmsg_internal("pgpipe failed to getsockname: %ui", WSAGetLastError()))); */ 59 closesocket(s); 60 return -1; 61 } 62 if ((handles[1] = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 63 { 64 /* ereport(LOG, (errmsg_internal("pgpipe failed to create socket 2: %ui", WSAGetLastError()))); */ 65 closesocket(s); 66 return -1; 67 } 68 69 if (connect(handles[1], (SOCKADDR *) & serv_addr, len) == SOCKET_ERROR) 70 { 71 /* ereport(LOG, (errmsg_internal("pgpipe failed to connect socket: %ui", WSAGetLastError()))); */ 72 closesocket(s); 73 return -1; 74 } 75 if ((handles[0] = accept(s, (SOCKADDR *) & serv_addr, &len)) == INVALID_SOCKET) 76 { 77 /* ereport(LOG, (errmsg_internal("pgpipe failed to accept socket: %ui", WSAGetLastError()))); */ 78 closesocket(handles[1]); 79 handles[1] = INVALID_SOCKET; 80 closesocket(s); 81 return -1; 82 } 83 closesocket(s); 84 return 0; 85 } 86 87 static int 88 piperead( int s, char *buf, int len ) 89 { 90 int ret = recv(s, buf, len, 0); 91 92 if (ret < 0 && WSAGetLastError() == WSAECONNRESET) 93 /* EOF on the pipe! (win32 socket based implementation) */ 94 ret = 0; 95 return ret; 96 } 97 98 #define pipe(a) pgpipe(a) 99 #define pipewrite(a,b,c) send(a,b,c,0) 100 24 101 #else 25 #include <unistd.h> 102 #define piperead(a,b,c) read(a,b,c) 103 #define pipewrite(a,b,c) write(a,b,c) 26 104 #endif 105 106 #include <unistd.h> 27 107 28 108 #include <event.h> … … 84 164 do 85 165 { 86 ret = read( fd, &ch, 1 );166 ret = piperead( fd, &ch, 1 ); 87 167 } 88 168 while( !eh->die && ret < 0 && errno == EAGAIN ); … … 96 176 struct tr_run_data data; 97 177 const size_t nwant = sizeof( data ); 98 const ssize_t ngot = read( fd, &data, nwant );178 const ssize_t ngot = piperead( fd, &data, nwant ); 99 179 if( !eh->die && ( ngot == (ssize_t)nwant ) ) 100 180 { … … 109 189 tr_timer * timer; 110 190 const size_t nwant = sizeof( timer ); 111 const ssize_t ngot = read( fd, &timer, nwant );191 const ssize_t ngot = piperead( fd, &timer, nwant ); 112 192 if( !eh->die && ( ngot == (ssize_t)nwant ) ) 113 193 { … … 269 349 270 350 tr_lockLock( lock ); 271 write( fd, &ch, 1 );272 write( fd, &timer, sizeof( timer ) );351 pipewrite( fd, &ch, 1 ); 352 pipewrite( fd, &timer, sizeof( timer ) ); 273 353 tr_lockUnlock( lock ); 274 354 } … … 294 374 295 375 tr_lockLock( lock ); 296 write( fd, &ch, 1 );376 pipewrite( fd, &ch, 1 ); 297 377 data.func = func; 298 378 data.user_data = user_data; 299 write( fd, &data, sizeof( data ) );379 pipewrite( fd, &data, sizeof( data ) ); 300 380 tr_lockUnlock( lock ); 301 381 }
Note: See TracChangeset
for help on using the changeset viewer.