0
运行时,程序给出在非插座上的插座操作:在设置插座选项和装订插座时出错
在非插座上的插座操作:绑定插座时发生错误。
后,当我用setsockopt()
再次给了我错误:
socket operation on non socket, error while setting options to socket.
我目前使用Ubuntu 16.04
。 操作系统或我的代码有问题吗? (因为我已经看到我在这里使用 端口没有被任何其他程序,我试图改变 端口号10000和56000也是范围)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#define PORT 7890
int main()
{
int sock_fd, new_sockfd;
struct sockaddr_in host_addr, client_addr;
socklen_t sin_size;
int recv_length, yes = 1;
char buffer[1024];
if(sock_fd = socket(AF_INET, SOCK_STREAM, 0) == -1)
{
perror("in creating socket \n");
exit(-1);
}
else
printf("Socket: SUCCESS \n");
if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &yes,sizeof(int)) == -1)
perror("while setting socket option SO_REUSEADDR \n");
else
printf("Socket Option: SUCCESS \n");
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons(PORT);
host_addr.sin_addr.s_addr = 0;
memset(&(host_addr.sin_zero), '\0', 8);
if(bind(sock_fd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr)) == -1)
perror("while binding \n");
else
printf("Binding: SUCCESS \n");
if(listen(sock_fd, 5) == -1)
perror("while listening \n");
else
printf("Listen: SUCCESS \n");
while(1)
{
sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sock_fd, (struct sockaddr *)&client_addr, &sin_size);
if(new_sockfd == -1)
{
perror("failed to accept \n");
exit(-1);
}
else
printf("accept: SUCCESS \n");
printf("Server got connction from IP ADDRESS: %s, PORT NUMBER:%d \n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
send(new_sockfd, "HELLO BASTARDS !\n", 16, 0);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
while(recv_length > 0)
{
printf("Recieved %d Bytes \n", recv_length);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
}
close(new_sockfd);
}
return 0;
}
这个'如果(sock_fd =插座(AF_INET,SOCK_STREAM,0)== -1)'不会做你期望的。注意运营商的优先顺序。 '=='绑定比'='更紧密。 – alk