| 75 | |
| 76 | template <class A, class S> |
| 77 | void RunInetStreamTest(const char* ip) { |
| 78 | char buf[256]; |
| 79 | A servAddr(ip, 0); |
| 80 | A newAddr; |
| 81 | S cliSock; |
| 82 | S servSock; |
| 83 | S newSock; |
| 84 | cliSock.CheckSock(); |
| 85 | servSock.CheckSock(); |
| 86 | newSock.CheckSock(); |
| 87 | |
| 88 | // server |
| 89 | int yes = 1; |
| 90 | CheckedSetSockOpt(servSock, SOL_SOCKET, SO_REUSEADDR, yes, "servSock, SO_REUSEADDR"); |
| 91 | TBaseSocket::Check(servSock.Bind(&servAddr), "bind"); |
| 92 | TBaseSocket::Check(servSock.Listen(10), "listen"); |
| 93 | |
| 94 | // client |
| 95 | TBaseSocket::Check(cliSock.Connect(&servAddr), "connect"); |
| 96 | |
| 97 | // server |
| 98 | TBaseSocket::Check(servSock.Accept(&newSock, &newAddr), "accept"); |
| 99 | |
| 100 | // client |
| 101 | const char reqStr[] = "Hello, world!!!"; |
| 102 | TBaseSocket::Check(cliSock.Send(reqStr, sizeof(reqStr)), "send"); |
| 103 | |
| 104 | // server - new |
| 105 | TBaseSocket::Check(newSock.Recv(buf, 256), "recv"); |
| 106 | UNIT_ASSERT(strcmp(reqStr, buf) == 0); |
| 107 | const char repStr[] = "The World's greatings to you"; |
| 108 | TBaseSocket::Check(newSock.Send(repStr, sizeof(repStr)), "send"); |
| 109 | |
| 110 | // client |
| 111 | TBaseSocket::Check(cliSock.Recv(buf, 256), "recv"); |
| 112 | UNIT_ASSERT(strcmp(repStr, buf) == 0); |
| 113 | } |
| 114 | |
| 115 | Y_UNIT_TEST(InetStreamTest) { |
| 116 | RunInetStreamTest<TSockAddrInetStream, TInetStreamSocket>("127.0.0.1"); |