@@ -197,18 +197,18 @@ pq_init(void)
197
197
* infinite recursion.
198
198
*/
199
199
#ifndef WIN32
200
- if (!pg_set_noblock (MyProcPort -> sock , MyProcPort -> isRsocket ))
200
+ if (!pg_set_noblock_extended (MyProcPort -> sock ))
201
201
ereport (COMMERROR ,
202
202
(errmsg ("could not set socket to nonblocking mode: %m" )));
203
203
#endif
204
204
205
205
#ifdef WITH_RSOCKET
206
- if (MyProcPort -> isRsocket )
206
+ if (PG_ISRSOCKET ( MyProcPort -> sock ) )
207
207
FeBeWaitSet = CreateWaitEventSetForRsocket (TopMemoryContext ,3 );
208
208
else
209
209
#endif
210
210
FeBeWaitSet = CreateWaitEventSet (TopMemoryContext ,3 );
211
- AddWaitEventToSet (FeBeWaitSet ,WL_SOCKET_WRITEABLE ,MyProcPort -> sock ,
211
+ AddWaitEventToSet (FeBeWaitSet ,WL_SOCKET_WRITEABLE ,PG_SOCK ( MyProcPort -> sock ) ,
212
212
NULL ,NULL );
213
213
AddWaitEventToSet (FeBeWaitSet ,WL_LATCH_SET ,-1 ,MyLatch ,NULL );
214
214
AddWaitEventToSet (FeBeWaitSet ,WL_POSTMASTER_DEATH ,-1 ,NULL ,NULL );
@@ -235,18 +235,18 @@ pq_reinit(void)
235
235
* infinite recursion.
236
236
*/
237
237
#ifndef WIN32
238
- if (!pg_set_noblock (MyProcPort -> sock , MyProcPort -> isRsocket ))
238
+ if (!pg_set_noblock_extended (MyProcPort -> sock ))
239
239
ereport (COMMERROR ,
240
240
(errmsg ("could not set socket to nonblocking mode: %m" )));
241
241
#endif
242
242
243
243
#ifdef WITH_RSOCKET
244
- if (MyProcPort -> isRsocket )
244
+ if (PG_ISRSOCKET ( MyProcPort -> sock ) )
245
245
FeBeWaitSet = CreateWaitEventSetForRsocket (TopMemoryContext ,3 );
246
246
else
247
247
#endif
248
248
FeBeWaitSet = CreateWaitEventSet (TopMemoryContext ,3 );
249
- AddWaitEventToSet (FeBeWaitSet ,WL_SOCKET_WRITEABLE ,MyProcPort -> sock ,
249
+ AddWaitEventToSet (FeBeWaitSet ,WL_SOCKET_WRITEABLE ,PG_SOCK ( MyProcPort -> sock ) ,
250
250
NULL ,NULL );
251
251
AddWaitEventToSet (FeBeWaitSet ,WL_LATCH_SET ,-1 ,MyLatch ,NULL );
252
252
AddWaitEventToSet (FeBeWaitSet ,WL_POSTMASTER_DEATH ,-1 ,NULL ,NULL );
@@ -323,8 +323,9 @@ socket_close(int code, Datum arg)
323
323
* We do set sock to PGINVALID_SOCKET to prevent any further I/O,
324
324
* though.
325
325
*/
326
- MyProcPort -> sock = PGINVALID_SOCKET ;
327
- MyProcPort -> isRsocket = false;
326
+ Assert (MyProcPort -> sock );
327
+ free (MyProcPort -> sock );
328
+ MyProcPort -> sock = NULL ;
328
329
}
329
330
}
330
331
@@ -477,7 +478,7 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
477
478
break ;
478
479
}
479
480
480
- if ((fd = pg_socket (addr -> ai_family ,SOCK_STREAM ,0 , false ))
481
+ if ((fd = socket (addr -> ai_family ,SOCK_STREAM ,0 ))
481
482
== PGINVALID_SOCKET )
482
483
{
483
484
ereport (LOG ,
@@ -503,13 +504,13 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
503
504
*/
504
505
if (!IS_AF_UNIX (addr -> ai_family ))
505
506
{
506
- if ((pg_setsockopt (fd ,SOL_SOCKET ,SO_REUSEADDR ,
507
- (char * )& one ,sizeof (one ), false ))== -1 )
507
+ if ((setsockopt (fd ,SOL_SOCKET ,SO_REUSEADDR ,
508
+ (char * )& one ,sizeof (one )))== -1 )
508
509
{
509
510
ereport (LOG ,
510
511
(errcode_for_socket_access (),
511
512
errmsg ("setsockopt(SO_REUSEADDR) failed: %m" )));
512
- pg_closesocket (fd , false );
513
+ closesocket (fd );
513
514
continue ;
514
515
}
515
516
}
@@ -518,13 +519,13 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
518
519
#ifdef IPV6_V6ONLY
519
520
if (addr -> ai_family == AF_INET6 )
520
521
{
521
- if (pg_setsockopt (fd ,IPPROTO_IPV6 ,IPV6_V6ONLY ,
522
- (char * )& one ,sizeof (one ), false )== -1 )
522
+ if (setsockopt (fd ,IPPROTO_IPV6 ,IPV6_V6ONLY ,
523
+ (char * )& one ,sizeof (one ))== -1 )
523
524
{
524
525
ereport (LOG ,
525
526
(errcode_for_socket_access (),
526
527
errmsg ("setsockopt(IPV6_V6ONLY) failed: %m" )));
527
- pg_closesocket (fd , false );
528
+ closesocket (fd );
528
529
continue ;
529
530
}
530
531
}
@@ -536,7 +537,7 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
536
537
* ipv4 addresses to ipv6. It will show ::ffff:ipv4 for all ipv4
537
538
* connections.
538
539
*/
539
- err = pg_bind (fd ,addr -> ai_addr ,addr -> ai_addrlen , false );
540
+ err = bind (fd ,addr -> ai_addr ,addr -> ai_addrlen );
540
541
if (err < 0 )
541
542
{
542
543
ereport (LOG ,
@@ -551,7 +552,7 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
551
552
errhint ("Is another postmaster already running on port %d?"
552
553
" If not, wait a few seconds and retry." ,
553
554
(int )portNumber )));
554
- pg_closesocket (fd , false );
555
+ closesocket (fd );
555
556
continue ;
556
557
}
557
558
@@ -560,7 +561,7 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
560
561
{
561
562
if (Setup_AF_UNIX (service )!= STATUS_OK )
562
563
{
563
- pg_closesocket (fd , false );
564
+ closesocket (fd );
564
565
break ;
565
566
}
566
567
}
@@ -575,15 +576,15 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
575
576
if (maxconn > PG_SOMAXCONN )
576
577
maxconn = PG_SOMAXCONN ;
577
578
578
- err = pg_listen (fd ,maxconn , false );
579
+ err = listen (fd ,maxconn );
579
580
if (err < 0 )
580
581
{
581
582
ereport (LOG ,
582
583
(errcode_for_socket_access (),
583
584
/* translator: %s is IPv4, IPv6, or Unix */
584
585
errmsg ("could not listen on %s socket: %m" ,
585
586
familyDesc )));
586
- pg_closesocket (fd , false );
587
+ closesocket (fd );
587
588
continue ;
588
589
}
589
590
ListenSocket [listen_index ]= fd ;
@@ -711,11 +712,13 @@ Setup_AF_UNIX(char *sock_path)
711
712
int
712
713
StreamConnection (pgsocket server_fd ,Port * port )
713
714
{
715
+ pgsocket fd ;
716
+
714
717
/* accept connection and fill in the client (remote) address */
715
718
port -> raddr .salen = sizeof (port -> raddr .addr );
716
- if ((port -> sock = pg_accept (server_fd ,
717
- (struct sockaddr * )& port -> raddr .addr ,
718
- & port -> raddr .salen , port -> isRsocket ))== PGINVALID_SOCKET )
719
+ if ((fd = accept (server_fd ,
720
+ (struct sockaddr * )& port -> raddr .addr ,
721
+ & port -> raddr .salen ))== PGINVALID_SOCKET )
719
722
{
720
723
ereport (LOG ,
721
724
(errcode_for_socket_access (),
@@ -732,6 +735,9 @@ StreamConnection(pgsocket server_fd, Port *port)
732
735
return STATUS_ERROR ;
733
736
}
734
737
738
+ port -> sock = initialize_socket ();
739
+ port -> sock -> fd = fd ;
740
+
735
741
#ifdef SCO_ACCEPT_BUG
736
742
737
743
/*
@@ -746,7 +752,7 @@ StreamConnection(pgsocket server_fd, Port *port)
746
752
port -> laddr .salen = sizeof (port -> laddr .addr );
747
753
if (pg_getsockname (port -> sock ,
748
754
(struct sockaddr * )& port -> laddr .addr ,
749
- & port -> laddr .salen , port -> isRsocket )< 0 )
755
+ & port -> laddr .salen )< 0 )
750
756
{
751
757
elog (LOG ,"getsockname() failed: %m" );
752
758
return STATUS_ERROR ;
@@ -765,15 +771,15 @@ StreamConnection(pgsocket server_fd, Port *port)
765
771
#ifdef TCP_NODELAY
766
772
on = 1 ;
767
773
if (pg_setsockopt (port -> sock ,IPPROTO_TCP ,TCP_NODELAY ,
768
- (char * )& on ,sizeof (on ), port -> isRsocket )< 0 )
774
+ (char * )& on ,sizeof (on ))< 0 )
769
775
{
770
776
elog (LOG ,"setsockopt(TCP_NODELAY) failed: %m" );
771
777
return STATUS_ERROR ;
772
778
}
773
779
#endif
774
780
on = 1 ;
775
781
if (pg_setsockopt (port -> sock ,SOL_SOCKET ,SO_KEEPALIVE ,
776
- (char * )& on ,sizeof (on ), port -> isRsocket )< 0 )
782
+ (char * )& on ,sizeof (on ))< 0 )
777
783
{
778
784
elog (LOG ,"setsockopt(SO_KEEPALIVE) failed: %m" );
779
785
return STATUS_ERROR ;
@@ -803,17 +809,17 @@ StreamConnection(pgsocket server_fd, Port *port)
803
809
* https://msdn.microsoft.com/en-us/library/bb736549%28v=vs.85%29.aspx
804
810
*/
805
811
optlen = sizeof (oldopt );
806
- if (pg_getsockopt (port -> sock ,SOL_SOCKET ,SO_SNDBUF , ( char * ) & oldopt ,
807
- & optlen , port -> isRsocket )< 0 )
812
+ if (pg_getsockopt (port -> sock ,SOL_SOCKET ,SO_SNDBUF ,
813
+ ( char * ) & oldopt , & optlen )< 0 )
808
814
{
809
815
elog (LOG ,"getsockopt(SO_SNDBUF) failed: %m" );
810
816
return STATUS_ERROR ;
811
817
}
812
818
newopt = PQ_SEND_BUFFER_SIZE * 4 ;
813
819
if (oldopt < newopt )
814
820
{
815
- if (pg_setsockopt (port -> sock ,SOL_SOCKET ,SO_SNDBUF , ( char * ) & newopt ,
816
- sizeof ( newopt ), port -> isRsocket )< 0 )
821
+ if (pg_setsockopt (port -> sock ,SOL_SOCKET ,SO_SNDBUF ,
822
+ ( char * ) & newopt , sizeof ( newopt ) )< 0 )
817
823
{
818
824
elog (LOG ,"setsockopt(SO_SNDBUF) failed: %m" );
819
825
return STATUS_ERROR ;
@@ -847,9 +853,9 @@ StreamConnection(pgsocket server_fd, Port *port)
847
853
* we do NOT want to send anything to the far end.
848
854
*/
849
855
void
850
- StreamClose (pgsocket sock , bool isRsocket )
856
+ StreamClose (pgsocket sock )
851
857
{
852
- pg_closesocket (sock , isRsocket );
858
+ closesocket (sock );
853
859
}
854
860
855
861
/*
@@ -1675,7 +1681,7 @@ pq_setkeepaliveswin32(Port *port, int idle, int interval)
1675
1681
ka .keepalivetime = idle * 1000 ;
1676
1682
ka .keepaliveinterval = interval * 1000 ;
1677
1683
1678
- if (WSAIoctl (port -> sock ,
1684
+ if (WSAIoctl (port -> sock -> fd ,
1679
1685
SIO_KEEPALIVE_VALS ,
1680
1686
(LPVOID )& ka ,
1681
1687
sizeof (ka ),
@@ -1716,15 +1722,15 @@ pq_getkeepalivesidle(Port *port)
1716
1722
#ifdef TCP_KEEPIDLE
1717
1723
if (pg_getsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPIDLE ,
1718
1724
(char * )& port -> default_keepalives_idle ,
1719
- & size , port -> isRsocket )< 0 )
1725
+ & size )< 0 )
1720
1726
{
1721
1727
elog (LOG ,"getsockopt(TCP_KEEPIDLE) failed: %m" );
1722
1728
port -> default_keepalives_idle = -1 ;/* don't know */
1723
1729
}
1724
1730
#else
1725
1731
if (pg_getsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPALIVE ,
1726
1732
(char * )& port -> default_keepalives_idle ,
1727
- & size , port -> isRsocket )< 0 )
1733
+ & size )< 0 )
1728
1734
{
1729
1735
elog (LOG ,"getsockopt(TCP_KEEPALIVE) failed: %m" );
1730
1736
port -> default_keepalives_idle = -1 ;/* don't know */
@@ -1769,14 +1775,14 @@ pq_setkeepalivesidle(int idle, Port *port)
1769
1775
1770
1776
#ifdef TCP_KEEPIDLE
1771
1777
if (pg_setsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPIDLE ,
1772
- (char * )& idle ,sizeof (idle ), port -> isRsocket )< 0 )
1778
+ (char * )& idle ,sizeof (idle ))< 0 )
1773
1779
{
1774
1780
elog (LOG ,"setsockopt(TCP_KEEPIDLE) failed: %m" );
1775
1781
return STATUS_ERROR ;
1776
1782
}
1777
1783
#else
1778
1784
if (pg_setsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPALIVE ,
1779
- (char * )& idle ,sizeof (idle ), port -> isRsocket )< 0 )
1785
+ (char * )& idle ,sizeof (idle ))< 0 )
1780
1786
{
1781
1787
elog (LOG ,"setsockopt(TCP_KEEPALIVE) failed: %m" );
1782
1788
return STATUS_ERROR ;
@@ -1814,7 +1820,7 @@ pq_getkeepalivesinterval(Port *port)
1814
1820
1815
1821
if (pg_getsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPINTVL ,
1816
1822
(char * )& port -> default_keepalives_interval ,
1817
- & size , port -> isRsocket )< 0 )
1823
+ & size )< 0 )
1818
1824
{
1819
1825
elog (LOG ,"getsockopt(TCP_KEEPINTVL) failed: %m" );
1820
1826
port -> default_keepalives_interval = -1 ;/* don't know */
@@ -1857,7 +1863,7 @@ pq_setkeepalivesinterval(int interval, Port *port)
1857
1863
interval = port -> default_keepalives_interval ;
1858
1864
1859
1865
if (pg_setsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPINTVL ,
1860
- (char * )& interval ,sizeof (interval ), port -> isRsocket )< 0 )
1866
+ (char * )& interval ,sizeof (interval ))< 0 )
1861
1867
{
1862
1868
elog (LOG ,"setsockopt(TCP_KEEPINTVL) failed: %m" );
1863
1869
return STATUS_ERROR ;
@@ -1894,7 +1900,7 @@ pq_getkeepalivescount(Port *port)
1894
1900
1895
1901
if (pg_getsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPCNT ,
1896
1902
(char * )& port -> default_keepalives_count ,
1897
- & size , port -> isRsocket )< 0 )
1903
+ & size )< 0 )
1898
1904
{
1899
1905
elog (LOG ,"getsockopt(TCP_KEEPCNT) failed: %m" );
1900
1906
port -> default_keepalives_count = -1 ;/* don't know */
@@ -1932,7 +1938,7 @@ pq_setkeepalivescount(int count, Port *port)
1932
1938
count = port -> default_keepalives_count ;
1933
1939
1934
1940
if (pg_setsockopt (port -> sock ,IPPROTO_TCP ,TCP_KEEPCNT ,
1935
- (char * )& count ,sizeof (count ), port -> isRsocket )< 0 )
1941
+ (char * )& count ,sizeof (count ))< 0 )
1936
1942
{
1937
1943
elog (LOG ,"setsockopt(TCP_KEEPCNT) failed: %m" );
1938
1944
return STATUS_ERROR ;