diff options
Diffstat (limited to 'emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp')
| -rw-r--r-- | emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp b/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp index 4da2cec..8a6e56e 100644 --- a/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp +++ b/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp @@ -28,6 +28,8 @@ #include <ws2tcpip.h> #endif +#define LISTEN_BACKLOG 4 + TcpStream::TcpStream(size_t bufSize) : SocketStream(bufSize) { @@ -47,10 +49,22 @@ TcpStream::TcpStream(int sock, size_t bufSize) : setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (const char*)&flag, sizeof(flag) ); } -int TcpStream::listen(unsigned short port) +int TcpStream::listen(char addrstr[MAX_ADDRSTR_LEN]) { - m_sock = socket_loopback_server(port, SOCK_STREAM); - if (!valid()) return int(ERR_INVALID_SOCKET); + m_sock = socket_loopback_server(0, SOCK_STREAM); + if (!valid()) + return int(ERR_INVALID_SOCKET); + + /* get the actual port number assigned by the system */ + struct sockaddr_in addr; + socklen_t addrLen = sizeof(addr); + memset(&addr, 0, sizeof(addr)); + if (getsockname(m_sock, (struct sockaddr*)&addr, &addrLen) < 0) { + close(m_sock); + return int(ERR_INVALID_SOCKET); + } + snprintf(addrstr, MAX_ADDRSTR_LEN - 1, "%hu", ntohs(addr.sin_port)); + addrstr[MAX_ADDRSTR_LEN-1] = '\0'; return 0; } @@ -78,8 +92,9 @@ SocketStream * TcpStream::accept() return clientStream; } -int TcpStream::connect(unsigned short port) +int TcpStream::connect(const char* addr) { + int port = atoi(addr); return connect("127.0.0.1",port); } |
