我是套接字编程的新手,我正在尝试编写一个连接到PC上另一个套接字的简单套接字(nc -l 35353
)
我在尝试绑定套接字时遇到错误,我不知道如何调试它。
UPDATE:套接字调用返回0作为文件描述符,虽然手册页没有说这是非法的,我认为unix / linux为stdin,stdout保留fd 0,1和2和默认情况下的stderr。我不确定这与我看到的绑定错误有什么关系,我觉得这可能是合适的。
这是代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
//typedef struct sockaddr_in sockaddr_in;
int main()
{
int sock_fd;
if( sock_fd = socket(AF_INET, SOCK_STREAM, 0) < 0)
{
perror("Socket Creation error!\n");
return 1;
}
struct sockaddr_in myaddr;
memset((char*)&myaddr, 0, sizeof(myaddr));
myaddr.sin_family = AF_INET;
uint32_t myip = (127<<24)|(0<<16)|(0<<8)|1;
myaddr.sin_addr.s_addr = htonl(myip);
myaddr.sin_port = htons(1337);
int binderror = bind(sock_fd, (struct sockaddr*)&myaddr, sizeof(myaddr));
printf("bind error %d\n",binderror);
if( binderror < 0)
{
perror("Bind Error!\n");
return 1;
}
struct sockaddr_in serveraddr;
memset((char*)&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(35353);
//unsigned char serverip[] = {127,0,0,1};
uint32_t serverip = (127<<24)|(0<<16)|(0<<8)|1;
serveraddr.sin_addr.s_addr = htonl(serverip);
if( connect(sock_fd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0 ){
perror("Could not connect\n");
return 0;
}
}
答案 0 :(得分:3)
你的问题在这里 -
if( sock_fd = socket(AF_INET, SOCK_STREAM, 0) < 0)
这是旧的优先权,
if ( a = b == c )
就像在说if ( a = ( b == c ))
一样,它正在调用函数,将其与-1
进行比较,并将布尔结果赋给sock_fd
你想做的是 -
if( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)