11#include " tcp_server.h"
22
33#include < iostream>
4- #include < netinet/in.h>
54#include < stdio.h>
65#include < stdlib.h>
76#include < string.h>
8- #include < sys/socket.h>
7+
8+ #include < winsock2.h>
9+ /*
10+ #if defined(_win_)
11+ # include <winsock2.h>
12+ #else
13+ # include <netinet/in.h>
14+ # include <sys/socket.h>
15+ # include <unistd.h>
16+ #endif
17+ */
18+
919#include < thread>
10- #include < unistd.h>
1120
1221namespace clickhouse {
1322
@@ -23,7 +32,7 @@ LocalTcpServer::~LocalTcpServer() {
2332void LocalTcpServer::start () {
2433 // setup a socket
2534 sockaddr_in servAddr;
26- bzero ((char *)&servAddr, sizeof (servAddr));
35+ memset ((char *)&servAddr, 0 , sizeof (servAddr));
2736 servAddr.sin_family = AF_INET;
2837 servAddr.sin_addr .s_addr = htonl (INADDR_ANY);
2938 servAddr.sin_port = htons (port_);
@@ -33,7 +42,14 @@ void LocalTcpServer::start() {
3342 throw std::runtime_error (" Error establishing server socket" );
3443 }
3544 int enable = 1 ;
36- if (setsockopt (serverSd_, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof (int )) < 0 ) {
45+
46+ #if defined(_unix_)
47+ auto res = setsockopt (serverSd_, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof (enable));
48+ #else
49+ auto res = setsockopt (serverSd_, SOL_SOCKET, SO_REUSEADDR, (const char *)&enable, sizeof (enable));
50+ #endif
51+
52+ if (res < 0 ) {
3753 std::cerr << " setsockopt(SO_REUSEADDR) failed" << std::endl;
3854 }
3955 // bind the socket to its local address
@@ -47,8 +63,14 @@ void LocalTcpServer::start() {
4763
4864void LocalTcpServer::stop () {
4965 if (serverSd_ > 0 ) {
66+
67+ #if defined(_unix_)
5068 shutdown (serverSd_, SHUT_RDWR);
5169 close (serverSd_);
70+ #else
71+ shutdown (serverSd_, SD_BOTH);
72+ closesocket (serverSd_);
73+ #endif
5274 serverSd_ = -1 ;
5375 }
5476}
0 commit comments