本文整理汇总了C++中ServerSocket::listen方法的典型用法代码示例。如果您正苦于以下问题:C++ ServerSocket::listen方法的具体用法?C++ ServerSocket::listen怎么用?C++ ServerSocket::listen使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ServerSocket
的用法示例。
在下文中一共展示了ServerSocket::listen方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
/*
StdWriteRead stdWriteRead;
runloop.registerReadIntent(fileno(stdin), &stdWriteRead);
runloop.run();
*/
/*
try
{
RunLoop runloop;
Socket socket;
socket.connect("localhost", 22, false);
int sock = socket.getSocket();
StdWriteRead stdWriteRead(sock);
runloop.registerReadIntent(sock, &stdWriteRead);
runloop.run();
}
catch ( std::runtime_error r )
{
fprintf(stderr, r.what());
}
*/
ServerSocket serverSocket;
serverSocket.listen("0.0.0.0", 3000, 10);
std::string ip;
serverSocket.accept(&ip, NULL);
printf("socket: %s\n", ip.c_str());
}
示例2: start
void TelnetServer::start( int port )
{
Socket::Address addr( port );
mSocket.bind( addr );
mSocket.listen( 5 );
mSocket.setSelector( this, &mSelector );
}
示例3: createSocketPair
void IOUtil::createSocketPair(int pair[2]) throw (IOException&)
{
#if defined(WIN32)
Socket connectSocket;
Socket serverClientSocket;
ServerSocket listenSocket;
SocketAddress loopback = SocketAddress::loopback(AF_INET, 0);
listenSocket.listen(loopback, 5, false);
connectSocket.connect(listenSocket.getLocalAddress(), true);
if (!listenSocket.accept(serverClientSocket))
{
THROW2(IOException, "Can't accept for socket pair");
}
pair[0] = connectSocket.detach();
pair[1] = serverClientSocket.detach();
#else
if (0 != ::socketpair(AF_LOCAL, SOCK_STREAM, 0, pair))
{
THROW2(IOException, "Can't create socket pair");
}
#endif
}
示例4: testConnect
void SocketTest::testConnect()
{
ServerSocket serv;
serv.bind(SocketAddress());
serv.listen();
StreamSocket ss;
Timespan timeout(250000);
ss.connect(SocketAddress("localhost", serv.address().port()), timeout);
}
示例5: sock
void KeyValueStore::InternalThread::incomingRoutine()
{
const Config::ServerInformation& info = config.getServerInformation();
Config::ThreadControl& control = config.getThreadControl();
Mutex& inMutex = control.getInMutex();
Condition& cond = control.getInCondition();
Thread incoming;
Incoming inTask;
int currId = -1;
static bool first = true;
// Init connection info
SocketAddress sock(info.address, info.internalPort);
ServerSocket server;
try {
server.bind(sock, true);
server.listen(5);
} catch(Exception& e) {
printKv("Could not initialize internal thread, please restart server ("<< e.displayText()<< ")");
}
StreamSocket client;
while(control.isLive()) {
inMutex.lock();
cond.wait(inMutex);
unsigned nextId = control.getConnectedId();
inMutex.unlock();
// NOTE: From a security perspective this is not safe.
// if someone tries to connect at the same time a rejoin
// was initiated, they could easily perform a MITM attack.
// However, since this is an academic exercise, I am not too
// concerned with security (as can be seen by many other components
// in this system as well).
if(currId != (int)nextId) {
currId = nextId;
// TODO: Update processing thread somehow
printKv("Told a new server should be connecting...");
try {
client = server.acceptConnection();
printKv("Incoming server connected: "<< currId);
inTask.cancel();
if(!first)
incoming.join();
first = false;
inTask = Incoming(client, &config.getThreadControl());
incoming.start(inTask);
printKv("Handling new server");
} catch(TimeoutException& e) {
printKv("Server did not connect in time - we don't want the system to be hung up, though ("<< e.displayText() <<")");
}
}
}
server.close();
}
示例6: init
WdtTransferRequest Receiver::init() {
vector<ServerSocket> successfulSockets;
for (size_t i = 0; i < threadServerSockets_.size(); i++) {
ServerSocket socket = std::move(threadServerSockets_[i]);
int max_retries = WdtOptions::get().max_retries;
for (int retries = 0; retries < max_retries; retries++) {
if (socket.listen() == OK) {
break;
}
}
if (socket.listen() == OK) {
successfulSockets.push_back(std::move(socket));
} else {
LOG(ERROR) << "Couldn't listen on port " << socket.getPort();
}
}
LOG(INFO) << "Registered " << successfulSockets.size() << " sockets";
ErrorCode code = OK;
if (threadServerSockets_.size() != successfulSockets.size()) {
code = FEWER_PORTS;
if (successfulSockets.size() == 0) {
code = ERROR;
}
}
threadServerSockets_ = std::move(successfulSockets);
WdtTransferRequest transferRequest(getPorts());
transferRequest.protocolVersion = protocolVersion_;
transferRequest.transferId = transferId_;
LOG(INFO) << "Transfer id " << transferRequest.transferId;
if (transferRequest.hostName.empty()) {
char hostName[1024];
int ret = gethostname(hostName, sizeof(hostName));
if (ret == 0) {
transferRequest.hostName.assign(hostName);
} else {
PLOG(ERROR) << "Couldn't find the host name";
code = ERROR;
}
}
transferRequest.directory = destDir_;
transferRequest.errorCode = code;
return transferRequest;
}
示例7: testAddress
void SocketTest::testAddress()
{
ServerSocket serv;
serv.bind(SocketAddress());
serv.listen();
StreamSocket ss;
ss.connect(SocketAddress("localhost", serv.address().port()));
StreamSocket css = serv.acceptConnection();
assert (css.peerAddress().host() == ss.address().host());
assert (css.peerAddress().port() == ss.address().port());
}
示例8: main
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ServerSocket s;
ClientSocket::loadPasswd();
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
if (!s.listen(QHostAddress::Any, 4869)) {
qDebug() << "cannot bind address";
exit(1);
}
return app.exec();
}
示例9: testAddress
void LocalSocketTest::testAddress()
{
SocketAddress sas("/tmp/poco.server.tcp.sock");
ServerSocket serv;
serv.bind(sas);
serv.listen();
StreamSocket ss;
SocketAddress sac("/tmp/poco.client.tcp.sock");
ss.connect(sas, &sac);
StreamSocket css = serv.acceptConnection();
assert (css.peerAddress().host() == ss.address().host());
assert (css.peerAddress().port() == ss.address().port());
}
示例10: testConnectRefused
void SocketTest::testConnectRefused()
{
ServerSocket serv;
serv.bind(SocketAddress());
serv.listen();
Poco::UInt16 port = serv.address().port();
serv.close();
StreamSocket ss;
Timespan timeout(250000);
try
{
ss.connect(SocketAddress("localhost", port));
fail("connection refused - must throw");
}
catch (ConnectionRefusedException&)
{
}
}
示例11: testConnectRefusedNB
void LocalSocketTest::testConnectRefusedNB()
{
SocketAddress sas("/tmp/poco.server.tcp.sock");
ServerSocket serv;
serv.bind(sas);
serv.listen();
serv.close();
StreamSocket ss;
Timespan timeout(10000);
SocketAddress sac("/tmp/poco.client.tcp.sock");
try
{
ss.connect(sas, timeout, &sac);
fail("connection refused - must throw");
}
catch (TimeoutException&)
{
}
catch (ConnectionRefusedException&)
{
}
}
示例12: main
int main(int argc, char *argv[])
{
LogFile log("test.log");
log << "**************************"
<< "New server session started";
Address addr(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(!addr.getHost(HOST, PORT))
{
logHost(log, "Unable to resolve");
return 1;
}
else
{
logHost(log, "Resolved");
}
ServerSocket server;
if(server.bind(addr) <= 0)
{
logHost(log, "Unable to bind to");
return 2;
}
else
{
logHost(log, "Bound to");
}
cout << "Server FD: " << server << endl;
if(!server.listen(10))
{
logHost(log, "Unable to listen on");
return 3;
}
else
{
logHost(log, "Listening on");
cout << "Listening on " << HOST << ":" << PORT << endl;
}
// Client and select poll structure setup
//vector<ClientSocket> clients;
map<int, unique_ptr<ClientSocket>> table;
map<int, string> names;
Multiplexer select;
server.setNonBlock(1);
select.insert(server);
Galaxy galaxy;
while(true)
{
if(select.poll() == -1)
{
cerr << "select.poll() error\n";
break;
}
for(int i = 0; i < FD_SETSIZE; ++i)
{
if(select.setRead(i))
{
if(server == i)
{
ClientSocket *client = new ClientSocket(server.accept());
if(client)
{
client->setNonBlock(1);
select.insert(*client);
table[*client] = unique_ptr<ClientSocket>(client);
}
else
log << "A client was rejected from the server";
continue;
}
char buf[256];
int bytes = recv(i, &buf[0], 255, 0);
if(bytes <= 0)
{
table[i]->close();
galaxy.rmPlayer(names[i]);
select.eradicate(i);
continue;
}
buf[bytes] = '\0';
string buffer(buf);
cout << "Client: " << buffer;
auto pos = buffer.find(':');
if(buffer.substr(0, pos) == "Login")
{
string name = buffer.substr(pos + 1,
buffer.size() - pos);
//.........这里部分代码省略.........
示例13: execute
void FileTransferSocketThread::execute()
{
if(info.hostType == eServer)
{
ServerSocket serverSocket;
serverSocket.bind(this->info.serverPort);
serverSocket.listen(1);
Socket *clientSocket = serverSocket.accept();
char data[513]="";
memset(data, 0, 256);
clientSocket->receive(data,256, true);
if(*data == SEND_FILE)
{
FileInfo file;
memcpy(&file, data+1, sizeof(file));
*data=ACK;
clientSocket->send(data,256);
Checksum checksum;
checksum.addFile(file.fileName);
file.filecrc = checksum.getSum();
ifstream infile(file.fileName.c_str(), ios::in | ios::binary | ios::ate);
if(infile.is_open() == true)
{
file.filesize = infile.tellg();
infile.seekg (0, ios::beg);
memset(data, 0, 256);
*data=SEND_FILE;
memcpy(data+1,&file,sizeof(file));
clientSocket->send(data,256);
clientSocket->receive(data,256, true);
if(*data != ACK) {
//transfer error
}
int remain=file.filesize % 512 ;
int packs=(file.filesize-remain)/512;
while(packs--)
{
infile.read(data,512);
//if(!ReadFile(file,data,512,&read,NULL))
// ; //read error
//if(written!=pack)
// ; //read error
clientSocket->send(data,512);
clientSocket->receive(data,256, true);
if(*data!=ACK) {
//transfer error
}
}
infile.read(data,remain);
//if(!ReadFile(file,data,remain,&read,NULL))
// ; //read error
//if(written!=pack)
// ; //read error
clientSocket->send(data,remain);
clientSocket->receive(data,256, true);
if(*data!=ACK) {
//transfer error
}
infile.close();
}
}
delete clientSocket;
}
else
{
Ip ip(this->info.serverIP);
ClientSocket clientSocket;
clientSocket.connect(this->info.serverIP, this->info.serverPort);
if(clientSocket.isConnected() == true)
{
FileInfo file;
file.fileName = this->info.fileName;
//file.filesize =
//file.filecrc = this->info.
string path = extractDirectoryPathFromFile(file.fileName);
createDirectoryPaths(path);
ofstream outFile(file.fileName.c_str(), ios_base::binary | ios_base::out);
if(outFile.is_open() == true)
{
char data[513]="";
memset(data, 0, 256);
*data=SEND_FILE;
memcpy(data+1,&file,sizeof(file));
//.........这里部分代码省略.........
示例14: Exception
//.........这里部分代码省略.........
catch(Exception &e)
{
LERR(e);
}
}
if(cfg.getChroot()!="")
{
//this is needed to get hermes to load the dns resolver BEFORE chrooting
(void)gethostbyname("hermes-project.com");
if(-1 == chdir(cfg.getChroot().c_str()))
{
LERR(_("Couldn't chdir into ") + cfg.getChroot() + " " + Utils::errnotostrerror(errno) );
return -1;
}
if(-1==chroot(cfg.getChroot().c_str()))
{
LERR(_("Couldn't chroot ") + Utils::errnotostrerror(errno));
return -1;
}
if(-1 == chdir("/"))
{
LERR(_("Couldn't chdir into /, this shouldn't happen: " + Utils::errnotostrerror(errno)) );
return -1;
}
}
#endif //WIN32
LINF("Starting hermes with pid "+Utils::inttostr(getpid()));
try
{
server.init();
server.setPort(cfg.getListeningPort());
server.listen(cfg.getListeningPort(),cfg.getBindTo());
}
catch(Exception &e)
{
LERR(e);
return -1; //couldn't bind, exit
}
#ifndef WIN32
if(cfg.getDropPrivileges())
{
//drop privileges once we have opened the listening port
if(-1 == setgroups(0,NULL))
{
LERR(_("Error dropping priviledges " + Utils::errnotostrerror(errno)) );
return -1;
}
if(-1 == setgid(cfg.getGid()))
{
LERR(_("Error setting gid " + Utils::inttostr(cfg.getGid()) + " " + Utils::errnotostrerror(errno)) );
return -1;
}
if(-1 == setuid(cfg.getUid()))
{
LERR(_("Error setting uid " + Utils::inttostr(cfg.getUid()) + " " + Utils::errnotostrerror(errno)) );
return -1;
}
if(-1 == setuid(cfg.getUid()))
{
LERR(_("Error setting uid " + Utils::inttostr(cfg.getUid()) + " " + Utils::errnotostrerror(errno)) );
return -1;
}
}