raw socket(菜鸟入门)求知道!
#include<stdio.h>#include "tcpnc.h"
#define BACKLOG 10
#define STDIN 0
int main(int argc,char *argv[])
{
FILE *fp;
char buf; //packet buffer
char buff; //account buffer
char send_str; //the content of sending
char *str;
int recvbytes;
int sockfd,client_fd;
fd_set rfd_set,wfd_set,efd_set;
struct timeval timeout;
int ret;
if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
{
printf("socket error!");
exit(1);
}
struct sockaddr_in my_addr,remote_addr;
int sin_size;
memset(&my_addr,0,sizeof(my_addr));
//bzero(&my_addr,sizeof(struct sockaddr_in));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVERPORT);
//my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
inet_aton("127.0.0.1",&my_addr.sin_addr);
//my_addr.sin_addr.s_addr=inet_addr("200.200.30.42");
const int on=1;
if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))==-1)
{
printf("setsockopt error!");
exit(0);
}
sin_size=sizeof(my_addr);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
printf("bind error!");
exit(1);
}
int lis=listen(sockfd,BACKLOG);
if(lis==-1)
{
printf("listen error!");
exit(1);
}
if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size))==-1)
{
printf("accept error!");
exit(1);
}代码运行出来,显示listen error!是不是由于raw socket不能够进行bind,listen啊?还是什么原因阿?求知道一下。主要是想做一个对tcp协议进行改进的私有协议,大家有没有好的方法阿,用原始套接字可以实现吗?
页:
[1]