📄 pipstmsv.cxx
字号:
/* * * C++ Portable Types Library (PTypes) * Version 1.7.5 Released 9-Mar-2003 * * Copyright (c) 2001, 2002, 2003 Hovik Melikyan * * http://www.melikyan.com/ptypes/ * http://ptypes.sourceforge.net/ * */#ifdef WIN32# include <winsock2.h>#else# include <sys/time.h># include <sys/types.h># include <sys/socket.h># include <netinet/in.h># include <arpa/inet.h># include <netdb.h># include <unistd.h># include <time.h>#endif#include "pinet.h"PTYPES_BEGIN//// ipstmserver//ipstmserver::ipstmserver() : ipsvbase(SOCK_STREAM){}ipstmserver::~ipstmserver(){ close();}void ipstmserver::dobind(ipbindinfo* b){ // set SO_REAUSEADDR to true int one = 1; if (::setsockopt(b->handle, SOL_SOCKET, SO_REUSEADDR, (sockval_t)&one, sizeof(one)) != 0) error(*b, usockerrno(), "Can't reuse local address"); // set up sockaddr_in and try to bind it to the socket sockaddr_in sa; memset(&sa, 0, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons(ushort(b->get_port())); sa.sin_addr.s_addr = b->get_ip(); if (::bind(b->handle, (sockaddr*)&sa, sizeof(sa)) != 0) error(*b, usockerrno(), "Couldn't bind address"); if (::listen(b->handle, SOMAXCONN) != 0) error(*b, usockerrno(), "Couldn't listen on socket");}bool ipstmserver::poll(int i, int timeout){ if (!active) open(); return dopoll(&i, timeout);}bool ipstmserver::serve(ipstream& client, int i, int timeout){ if (!active) open(); client.cancel(); if (dopoll(&i, timeout)) { // connect the ipstream object to the client requesting the connection client.svsocket = get_addr(i).handle; client.open(); return true; } return false;}PTYPES_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -