我的代码将始终处理"绑定失败"错误,我不知道为什么。我已多次阅读该手册页,但我无法发现代码有任何问题,有人可以引导我朝正确的方向前进吗?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 3490
#define BACKLOG 10
int main()
{
struct sockaddr_in server;
struct sockaddr_in dest;
int status,socket_fd, client_fd,num;
socklen_t size;
char buffer[10241];
char *buff;
// memset(buffer,0,sizeof(buffer));
int yes =1;
if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0))== -1) {
fprintf(stderr, "Socket failure!!\n");
exit(1);
}
if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}
memset(&server, 0, sizeof(server));
memset(&dest,0,sizeof(dest));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = INADDR_ANY;
if ((bind(socket_fd, (struct sockaddr *)&server, sizeof(struct sockaddr )))== -1) { //sizeof(struct sockaddr)
fprintf(stderr, "Binding Failure\n");
exit(1);
//other irrelevant code starts here
答案 0 :(得分:2)
如果netstat -an|grep 3490
确实显示127.0.0.1,则在端口上侦听另一个进程,绑定到127.0.0.1而不是INADDR_ANY,这就是SO_REUSEADDR不起作用的原因。但是在你接受我的建议之前,你永远不会知道。
答案 1 :(得分:0)
使用perror之后,我发现地址已被取消,我切换到另一个端口,它工作正常!