识别connect()的问题

识别connect()的问题,c,network-programming,C,Network Programming,我一直在代理服务器上工作。它必须连接到另一个“监视器”程序,并从该程序获取连接地址信息。该程序在已知的ip和端口上运行。如果我使用以下连接方式,它可以正常工作: struct hostent *serv; int sockfd; struct sockaddr_in serv_addr; serv = gethostbyname("localhost"); sockfd = socket(AF)INET, SOCK_STREAM, 0); if (sockfd < 0)

我一直在代理服务器上工作。它必须连接到另一个“监视器”程序,并从该程序获取连接地址信息。该程序在已知的ip和端口上运行。如果我使用以下连接方式,它可以正常工作:

struct hostent *serv;
int sockfd;
struct sockaddr_in serv_addr;

serv = gethostbyname("localhost");
sockfd = socket(AF)INET, SOCK_STREAM, 0);
   if (sockfd < 0)
      /*   Error handling    */ 
bzero((char *) &serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(portno); // portno is an int holding the port number
if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
   /*    error handling   */
但将其更改为:

fprintf(stderr, "Error Code %d\n", errno); // returns Error Code 60
试着替换

hints.ai_flags = 0;


看看会发生什么。

给我的ip地址不是我正在使用的计算机上的ip地址。我最终决定ip地址一定是问题所在。我在我的计算机上找到了ip地址,并让服务器程序绑定到它。我还将其作为上面包含的代码的ip地址而不是本地主机,它能够连接,而不管服务器是否位于该特定ip地址上或只是连接到INADDR\u ANY。

只是想知道,您是否在任何地方关闭了以前的连接?您的监控程序准备好接受多个连接了吗?到目前为止,监控程序只是一个回显服务器,它报告它有一个连接,它接收到什么并将其回显。我可以同时使用多个客户端副本登录到所有客户端,如果我使用gethostbyname()的第一个代码,则包括这一个。我也有同样的错误,即使它是唯一一个登录到监视器的标准要求使用提供的值初始化相应的元素(大括号初始化时);未初始化的元素(例如,如果只向大括号列表添加1个值)将自动归零。此外,您可以将其保留为空,这将为零初始化整个结构或数组。提示可以为空。可用于
ai_标志的常量包括
ai_被动、ai_CANONNAME、ai_NumeriHost、ai_V4MAPPED、ai_ALL、ai_ADDRCONFIG、ai_IDN、ai_CANONIDN、ai_IDN_ALLOW_UNASSIGNED、ai_IDN_USE_STD3_ASCII_规则、ai_NUMERIC_SERV
。如果您想了解它们的信息,请打开
netdb.h
标题(无论如何在linux中),每个标题旁边都有一条注释。您说的是“最终返回错误”,但没有说是哪一条。好的,尝试了同样的结果。那么你知道我在哪里可以找到这些标志及其含义的完整列表吗?@EdwardGoodson至少在linux下,它应该像
man getaddrinfo
和阅读文档一样简单。
fprintf(stderr, "Error Code %d\n", errno); // returns Error Code 60
hints.ai_flags = 0;
hints.ai_flags = AI_NUMERICHOST;