通过ACE_SOCK_Acceptor接受连接

Accepting a connection with ACE_SOCK_Acceptor

本文关键字:连接 SOCK ACE 通过 Acceptor      更新时间:2023-10-16

我刚开始学习ACE。我尝试了一些简单的例子,遇到了一个问题。这是我的代码:

int _tmain(int argc, _TCHAR* argv[])
{
    ACE_INET_Addr server_addr;
    ACE_SOCK_Acceptor acceptor;
    ACE_SOCK_Stream stream;
    if(server_addr.set(8888) == -1) return 1;
    if(acceptor.open(server_addr, 1) == -1) return 1;
    ....
}

当我调用acceptor.open(...)时它总是返回-1。我对网络编程有点陌生。据我所知,代码没有任何问题。我在一台有Wi-fi的笔记本电脑上编程,这有什么区别吗?我还打开了防火墙。(试着关掉它,没有区别)。

这是服务器端程序。我必须对我的电脑进行某种配置吗?

供您参考,这里是您可以在网上找到的教程列表。我建议使用反应器框架,一个例子是在$ACE_ROOTexamplesReactorTP_Reactor

但是回到你的问题,你不需要使用set(),而只需使用构造函数:

#include <ace/ACE.h>
#include <ace/SOCK_Acceptor.h>
#include <ace/INET_Addr.h>
#include <ace/Log_Msg.h>
int main(int argc, char *argv[])
{
  ACE_SOCK_Acceptor acceptor;
  ACE_INET_Addr server_addr(8888);
  // open a port using the acceptor; reuse the address later
  if (acceptor.open(server_addr, 1) == -1)
  {
    ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to open ")
                      ACE_TEXT ("listening socket. (errno = %i: %m)n"), ACE_ERRNO_GET), -1);
  }
  // ...
  return 0;
}