解决bind错误 bind: Address already in use

摘要:
关于bind错误的处理:bind:Addressalreadyinuse原因:操作系统没有立即释放端口解决一:等待一段时间运行网络程序即可解决二:通过setsockopt进行设置,关键代码如下。1//解决在close之后会有一个WAIT_TIME,导致bind失败的问题2intval=1;3intret=setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,(void*)&

关于bind错误的处理:
bind: Address already in use

原因: 操作系统没有立即释放端口

解决一: 等待一段时间运行网络程序即可

解决二:通过setsockopt进行设置,关键代码如下。

1         //解决在close之后会有一个WAIT_TIME,导致bind失败的问题
2     int val = 1;
3     int ret = setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,(void *)&val,sizeof(int));
4     if(ret == -1)
5 {
6         printf("setsockopt");
7         exit(1);
8     }     

举例:以多进程并发服务器为例

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 #include <sys/types.h>  
6 #include <sys/socket.h>
7 #include <netinet/in.h>
8 #include <arpa/inet.h>
9 #include <signal.h>
10 
11 #define PORT 7788
12 
13 intinit_tcp()
14 {
15     //1.创建套接字 - 设置协议
16     int sfd = socket(AF_INET,SOCK_STREAM,0);
17     if( -1 ==sfd )
18 {
19         perror("socket");
20         exit(-1);
21 }
22     //2. 解决在close之后会有一个WAIT_TIME,导致bind失败的问题
23     int val = 1;
24     int ret = setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,(void *)&val,sizeof(int));
25     if(ret == -1)
26 {
27         printf("setsockopt");
28         exit(1);
29 }
30     //3. 绑定IP和PORT
31     structsockaddr_in saddr;
32     saddr.sin_family =AF_INET;
33     saddr.sin_addr.s_addr =INADDR_ANY;
34     saddr.sin_port =htons(PORT);
35     ret = bind(sfd,(struct sockaddr *)&saddr,sizeof(saddr));
36     if(ret == -1)
37 {
38         printf("bind");
39         exit(1);
40 }
41     //4. 监听
42     ret = listen(sfd,5);
43     if(ret == -1)
44 {
45         printf("listen");
46         exit(1);
47 }
48     printf("Server is ready ... 
");
49     
50     returnsfd;
51 }
52 
53 void deal_communication(intcfd)
54 {
55     char buf[64] = {'

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 开发工具安装(5)Android平台Airplay的实现方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁

Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量、信号量和读写锁。 下面是思维导图:  一、互斥锁(mutex)   锁机制是同一时刻只允许一个线程执行一个关键部分的代码。 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t...

Linux中的端口占用问题

本文将会阐述两种解决端口占用的方法。 本文会用到的服务器端的程序如下: 1 #include "unp.h" 2 #include <time.h> 3 4 int main(int argc, char **argv) 5 { 6 intlistenfd, connfd; 7 socklen_t len; 8 struct...

Linux环境下proc的配置c/c++操作数据库简单示例

  在虚拟机上装了oracle11g数据库,原本想利用c/c++学习操作数据库.结果感觉摊上了一个大坑.从安装好oracle数据库到配置好proc的编译选项整整花了二天.但让我意识到自己自己几点薄弱:1.对Linux的命令和脚本的使用不够熟练.2.对Linux的个文件夹的作用不够了解;(打算下次补充一篇这样的总结博客.)3.英文还是很差劲的我.好入真题....

Linux GTK编程示例

1 #include <gtk/gtk.h> 2 3 static void helloWorld(GtkWidget *wid, GtkWidget *win) 4 { 5 GtkWidget *dialog = NULL; 6 dialog = gtk_message_dialog_new(GTK_WINDOW...

Code Tips: 线程读写锁自旋导致的死循环

发现问题        项目测试的时候,发现运行一段时间后会出现cpu百分之百的情况。     想着可能是哪里出现了死循环,于是打算用gdb跟一下,结果gdb居然无法attach到进程。 定位问题     查了查去,原来有一个优先级为RT的实时线程出现了死循环,并且由于配置了CPU的亲和属性,使得进程只运行在第一个核上,此时gdb就无法attach了   ...

Linux基础——查看IP及port的简单实现

需要注意,不同的机器,有的可能为大端字节序,有的可能为小端字节序。 小端就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。 大端就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。 实现代码如下: 1 #include <stdio.h> 2 #include <stdlib...