【发布时间】:2015-07-07 19:57:54
【问题描述】:
我正在用 C 语言编写一个客户端-服务器程序。我在 Bind 函数中遇到错误:Address Already in Use。所以我厌倦了使用 memset() 并且我收到错误消息:Invalid Argument。最后,我在这里寻找了类似的问题,其中一些建议使用 setsocketopt() 函数。我用了它,我收到错误说:
/tmp/ccBNsJtU.o:在函数
main:socket.c:(.text+0xd0): 对
setsocket的未定义引用collect2: 错误:ld 返回 1 个退出状态
即使在不同的编程语言中,我也研究了几乎所有类似的问题。现在我被困住了。我是否必须使用 setsocket() ,如果我这样做,是否会导致我的代码出现问题?或者我不必使用它,问题出在其他地方?问题可能出在我收听和发送消息的客户端或服务器功能中吗?这是 bind() 和 setsocket() 函数所在的代码部分:
int main (void) {
int sl, sa, bn, erro, lis;
int status;
//server log socket
struct sockaddr_un server = {AF_UNIX, "log_server"};
sl = socket (AF_UNIX, SOCK_STREAM, 0);
if(sl < 0) {
perror("Faild to create socket - in main");
exit(1);
}
//I added this part
if (setsocket(sl, SOL_SOCKET, SO_REUSEADDR, &server, sizeof(server)) == -1) {
perror("setsocket - in main");
exit(1);
}
bn = bind (sl, (struct sockaddr *)&server, sizeof(server));
if(bn < 0){
perror("Faild to bind - in main");
exit(1);
}
lis = listen (sl, 1); //to be changed to 4
if (lis < 0) {
perror("Faild to listen - in main");
}
【问题讨论】:
-
您至少描述了 3 个不同(且大多不相关)的问题。
-
@EugeneSh。嗯,我会改写我的问题,只包括一个问题。
标签: c network-programming client-server bind