@@ -218,7 +218,7 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket)
218
218
LogPrintf (" SOCKS5 connecting %s\n " , strDest);
219
219
if (strDest.size () > 255 )
220
220
{
221
- closesocket (hSocket);
221
+ CloseSocket (hSocket);
222
222
return error (" Hostname too long" );
223
223
}
224
224
char pszSocks5Init[] = " \5\1\0 " ;
@@ -227,18 +227,18 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket)
227
227
ssize_t ret = send (hSocket, pszSocks5Init, nSize, MSG_NOSIGNAL);
228
228
if (ret != nSize)
229
229
{
230
- closesocket (hSocket);
230
+ CloseSocket (hSocket);
231
231
return error (" Error sending to proxy" );
232
232
}
233
233
char pchRet1[2 ];
234
234
if (recv (hSocket, pchRet1, 2 , 0 ) != 2 )
235
235
{
236
- closesocket (hSocket);
236
+ CloseSocket (hSocket);
237
237
return error (" Error reading proxy response" );
238
238
}
239
239
if (pchRet1[0 ] != 0x05 || pchRet1[1 ] != 0x00 )
240
240
{
241
- closesocket (hSocket);
241
+ CloseSocket (hSocket);
242
242
return error (" Proxy failed to initialize" );
243
243
}
244
244
string strSocks5 (" \5\1 " );
@@ -250,23 +250,23 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket)
250
250
ret = send (hSocket, strSocks5.c_str (), strSocks5.size (), MSG_NOSIGNAL);
251
251
if (ret != (ssize_t )strSocks5.size ())
252
252
{
253
- closesocket (hSocket);
253
+ CloseSocket (hSocket);
254
254
return error (" Error sending to proxy" );
255
255
}
256
256
char pchRet2[4 ];
257
257
if (recv (hSocket, pchRet2, 4 , 0 ) != 4 )
258
258
{
259
- closesocket (hSocket);
259
+ CloseSocket (hSocket);
260
260
return error (" Error reading proxy response" );
261
261
}
262
262
if (pchRet2[0 ] != 0x05 )
263
263
{
264
- closesocket (hSocket);
264
+ CloseSocket (hSocket);
265
265
return error (" Proxy failed to accept request" );
266
266
}
267
267
if (pchRet2[1 ] != 0x00 )
268
268
{
269
- closesocket (hSocket);
269
+ CloseSocket (hSocket);
270
270
switch (pchRet2[1 ])
271
271
{
272
272
case 0x01 : return error (" Proxy error: general failure" );
@@ -282,7 +282,7 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket)
282
282
}
283
283
if (pchRet2[2 ] != 0x00 )
284
284
{
285
- closesocket (hSocket);
285
+ CloseSocket (hSocket);
286
286
return error (" Error: malformed proxy response" );
287
287
}
288
288
char pchRet3[256 ];
@@ -294,23 +294,23 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket)
294
294
{
295
295
ret = recv (hSocket, pchRet3, 1 , 0 ) != 1 ;
296
296
if (ret) {
297
- closesocket (hSocket);
297
+ CloseSocket (hSocket);
298
298
return error (" Error reading from proxy" );
299
299
}
300
300
int nRecv = pchRet3[0 ];
301
301
ret = recv (hSocket, pchRet3, nRecv, 0 ) != nRecv;
302
302
break ;
303
303
}
304
- default : closesocket (hSocket); return error (" Error: malformed proxy response" );
304
+ default : CloseSocket (hSocket); return error (" Error: malformed proxy response" );
305
305
}
306
306
if (ret)
307
307
{
308
- closesocket (hSocket);
308
+ CloseSocket (hSocket);
309
309
return error (" Error reading from proxy" );
310
310
}
311
311
if (recv (hSocket, pchRet3, 2 , 0 ) != 2 )
312
312
{
313
- closesocket (hSocket);
313
+ CloseSocket (hSocket);
314
314
return error (" Error reading from proxy" );
315
315
}
316
316
LogPrintf (" SOCKS5 connected %s\n " , strDest);
@@ -344,7 +344,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
344
344
if (fcntl (hSocket, F_SETFL, fFlags | O_NONBLOCK) == -1 )
345
345
#endif
346
346
{
347
- closesocket (hSocket);
347
+ CloseSocket (hSocket);
348
348
return false ;
349
349
}
350
350
@@ -365,13 +365,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
365
365
if (nRet == 0 )
366
366
{
367
367
LogPrint (" net" , " connection to %s timeout\n " , addrConnect.ToString ());
368
- closesocket (hSocket);
368
+ CloseSocket (hSocket);
369
369
return false ;
370
370
}
371
371
if (nRet == SOCKET_ERROR)
372
372
{
373
373
LogPrintf (" select() for %s failed: %s\n " , addrConnect.ToString (), NetworkErrorString (WSAGetLastError ()));
374
- closesocket (hSocket);
374
+ CloseSocket (hSocket);
375
375
return false ;
376
376
}
377
377
socklen_t nRetSize = sizeof (nRet);
@@ -382,13 +382,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
382
382
#endif
383
383
{
384
384
LogPrintf (" getsockopt() for %s failed: %s\n " , addrConnect.ToString (), NetworkErrorString (WSAGetLastError ()));
385
- closesocket (hSocket);
385
+ CloseSocket (hSocket);
386
386
return false ;
387
387
}
388
388
if (nRet != 0 )
389
389
{
390
390
LogPrintf (" connect() to %s failed after select(): %s\n " , addrConnect.ToString (), NetworkErrorString (nRet));
391
- closesocket (hSocket);
391
+ CloseSocket (hSocket);
392
392
return false ;
393
393
}
394
394
}
@@ -399,7 +399,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
399
399
#endif
400
400
{
401
401
LogPrintf (" connect() to %s failed: %s\n " , addrConnect.ToString (), NetworkErrorString (WSAGetLastError ()));
402
- closesocket (hSocket);
402
+ CloseSocket (hSocket);
403
403
return false ;
404
404
}
405
405
}
@@ -415,7 +415,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
415
415
if (fcntl (hSocket, F_SETFL, fFlags & ~O_NONBLOCK) == SOCKET_ERROR)
416
416
#endif
417
417
{
418
- closesocket (hSocket);
418
+ CloseSocket (hSocket);
419
419
return false ;
420
420
}
421
421
@@ -1258,3 +1258,16 @@ std::string NetworkErrorString(int err)
1258
1258
return strprintf (" %s (%d)" , s, err);
1259
1259
}
1260
1260
#endif
1261
+
1262
+ bool CloseSocket (SOCKET& hSocket)
1263
+ {
1264
+ if (hSocket == INVALID_SOCKET)
1265
+ return false ;
1266
+ #ifdef WIN32
1267
+ int ret = closesocket (hSocket);
1268
+ #else
1269
+ int ret = close (hSocket);
1270
+ #endif
1271
+ hSocket = INVALID_SOCKET;
1272
+ return ret != SOCKET_ERROR;
1273
+ }
0 commit comments