【发布时间】:2017-06-20 13:06:54
【问题描述】:
我正在尝试创建服务器/客户端通信,但它使用 errno 88 连接函数失败。我检查了 socketfd 是否有效(因为这个 errno 意味着我正在尝试对非套接字对象进行套接字操作)。
int main (int argc, char *argv[])
{
// Validity check
if (argc != VALID_ARG_NUM) {
std::cout << INVALID_ARG;
return 0; // todo - return 0 is correct??
}
int port;
struct sockaddr_in server_address;
// server_address initialization.
server_address.sin_family = AF_INET;
server_address.sin_port = htons((uint32_t)atof(argv[3]));
server_address.sin_addr.s_addr = inet_addr(argv[2]);
memset(&(server_address.sin_zero), '\0', sizeof(server_address));
// Create the client socket.
if (sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0) {
std::cout << "ERROR: socket " << errno << "." << std::endl;
exit(1);
}
// Connect to server.
if (connect(sockfd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
std::cout << "ERROR: connect " << errno << "." << std::endl;
std::cout << CON_FAIL;
close(sockfd);
exit(1);
}
.......
谢谢。
【问题讨论】:
-
如果您有可用的 Boost,或者能够下载它,我强烈建议您使用 Boost Asio 进行套接字编程。
-
errno中的错误代码实际上是平台相关的。请告诉我们您使用的平台(操作系统)。并使用例如strerror从错误代码中获取可打印的字符串。 -
对不起,操作系统是linux。
-
好的,我按照你告诉我的那样更改了它,但它仍然卡住 - 管道坏了..
-
Bind return error 88的可能重复