⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a_tcptime_svr.cpp

📁 一个不错
💻 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 + -