- 论坛徽章:
- 0
|
大家好!
初学socket编程,请教:
什么情况下connect会返回-1? 我用perror看了下,显示的是Connection refused.什么原因呢?
server代码如下
#include <string.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <arpa/inet.h>
int main (int argc, char *argv[])
{
if (2 != argc)
{
fprintf(stderr, "Usage: ./server portnum");
return -1;
}
int portnum;
int child_pid;
int listen_sock, accept_sock;
struct sockaddr_in server, client;
char buf[100];
int i = 0;
portnum = atoi(argv[1]);
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(portnum);
if (-1 == (listen_sock = socket(AF_INET, SOCK_STREAM, 0)))
{
fprintf(stderr, "socket() error!\n");
return -1;
}
if (-1 == (bind(listen_sock, (struct sockaddr *)&server, sizeof(server))))
{
fprintf(stderr, "bind() error!\n");
return -1;
}
if (-1 == (listen(listen_sock, 5)))
{
fprintf(stderr, "listen() error!\n");
return -1;
}
while (1)
{
fprintf(stderr, "before accept...\n");
accept_sock = accept(listen_sock, (struct sockaddr *)&client, sizeof(client));
fprintf(stderr, "after accept...\n ");
xxxxxxxx
}
return 0;
}
|
client代码如下:
int main (int argc, char* argv[])
{
if (argc != 3)
{
fprintf(stderr, "Usage: ./client addr port\n");
return -1;
}
struct sockaddr_in server;
int sock;
int port;
char buf[100];
int ret;
int read_ret;
port = atoi(argv[2]);
server.sin_port = port;
server.sin_addr.s_addr = inet_addr(argv[1]);
server.sin_family = AF_INET;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sock)
{
fprintf(stderr, "socket() error!\n");
return -1;
}
while (1)
{
ret = connect(sock, (struct sockaddr*)&server, sizeof(server));
if (-1 == ret)
{
if (errno == EINTR)
continue;
else
{
perror("break 1\n");
break;
}
}
else
{
fprintf(stderr, "break 2\n");
break;
}
}
xxxxxxxxx
return 1;
}
|
server上这样下命令: ./server 9527, server就阻塞在了accept之前
client上这样下命令: ./client 127.0.0.1 9527 结果client返回了Connection refused
127.0.0.1的地址应该没什么问题吧? |
|