📄 a_tcptime_svr.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2005 TCP server for time service Build: make a_tcptime_svr*/#include "../src/wysockfile.h"#include "../src/wysockaddrinet4.h"#include "../src/wydate.h"#include "../src/wy_uty.h"const time_t UNIX_EPOCH= 2208988800UL;// read data(unspecified) from cli_sock and writing current time back in time_t static WyRet time_service_for(WySockFile& cli_sock, const WySockAddrINet4& cli_addr) throw()try { WyRet r; char rbuf[256]; size_t rlen; if((r=cli_sock.read(rbuf,sizeof(rbuf)-1,rlen))!=Ok) { WY_THROW(r); } rbuf[rlen]=0; // forming zero-terminate string Wy::cout << "Connection from " << Wy::wrd(cli_addr.ip()) << " (" << cli_addr.port() << "): " << rbuf << '\n'; // write current time in time_t const WyTimeSpec tm_now( Wy::now() ); time_t tm(tm_now.second()+UNIX_EPOCH); tm=htonl(tm); if((r=Wy::full_write(cli_sock,&tm,sizeof(tm),rlen))!=Ok) { Wy::cerr << Wy::wrd(r) << '\n'; } return(Ok);}catch(const WyByteFlow::Reply& e) { WY_RETURN(e);}catch(...) { WY_TERMINATE("unknown throw type");};static const char* syntax= "[Syntax]$./a_tcptime_svr port\n";int main(int argc, char* argv[])try { if(argc!=2) { Wy::cout << syntax; return(-1); } WyRet r; uint16_t port; // convert argv[1] as the port number and save into port if((r=Wy::_strnum(port,NULL,argv[1]))!=Ok) { WY_THROW(r); } // setup server socket WySockFile svr_sock(PF_INET,SOCK_STREAM,0); const WySockAddrINet4 SvrAddr(INADDR_ANY,port); if((r=svr_sock.bind(SvrAddr))!=Ok) { WY_THROW(r); } if((r=svr_sock.listen(0))!=Ok) { WY_THROW(r); } // endless loop: respond each incoming message by writing current time back for(;;) { WySockFile a_sock; WySockAddrINet4 a_addr; if((r=svr_sock.accept(a_sock,a_addr))!=Ok) { WY_THROW(r); } if((r=time_service_for(a_sock,a_addr))!=Ok) { Wy::cerr << " .. Service failed\n"; // RESUME } } // UNREACHABLE return(0);}catch(const WyRet& e) { if(e!=Ok) { Wy::cerr << Wy::wrd(e) << '\n'; } return e->c_repcode();}catch(...) { Wy::cerr << "main caught(...)\n"; return(-1);};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -