碰到bind错误,主程序异常,调用处理函数退出问题
2012-06-29 11:22
731 查看
折腾了很久,才发现是调用BIND函数失败,从打印日志上看到是地址已经被用,是地址复用的问题,查看IBM文档库,如下,问题解决。
您可以使用
TCP 套接字状态
等待
考虑清单 3 的例子。在绑定地址之前,我以
1 (不然,可以设为 0 来禁止地址重用)。
您可以使用
bindAPI 函数来绑定一个地址(一个接口和一个端口)到一个套接字端点。可以在服务器设置中使用这个函数,以便限制可能有连接到来的接口。也可以在客户端设置中使用这个函数,以便限制应当供出去的连接所使用的接口。
bind最常见的用法是关联端口号和服务器,并使用通配符地址(
INADDR_ANY),它允许任何接口为到来的连接所使用。
bind普遍遭遇的问题是试图绑定一个已经在使用的端口。该陷阱是也许没有活动的套接字存在,但仍然禁止绑定端口(
bind返回
EADDRINUSE),它由
TCP 套接字状态
TIME_WAIT引起。该状态在套接字关闭后约保留 2 到 4 分钟。在
TIME_WAIT状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。
等待
TIME_WAIT结束可能是令人恼火的一件事,特别是如果您正在开发一个套接字服务器,就需要停止服务器来做一些改动,然后重启。幸运的是,有方法可以避开
TIME_WAIT状态。可以给套接字应用
SO_REUSEADDR套接字选项,以便端口可以马上重用。
考虑清单 3 的例子。在绑定地址之前,我以
SO_REUSEADDR选项调用
setsockopt。为了允许地址重用,我设置整型参数(
on)为
1 (不然,可以设为 0 来禁止地址重用)。
int sock, ret, on; struct sockaddr_in servaddr; /* Create a new stream (TCP) socket */ sock = socket( AF_INET, SOCK_STREAM, 0 ): /* Enable address reuse */ on = 1; ret = setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ); /* Allow connections to port 8080 from any available interface */ memset( &servaddr, 0, sizeof(servaddr) ); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl( INADDR_ANY ); servaddr.sin_port = htons( 45000 ); /* Bind to the address (interface/port) */ ret = bind( sock, (struct sockaddr *)&servaddr, sizeof(servaddr) ); |
相关文章推荐
- 程序中和有js函数的网页交互,线程中调用 get_Script 就会错误的解决方法,由于COM的线程安全问题
- 解决JNI调用DetachCurrentThread程序异常退出的问题
- C#调用参数为函数指针的API函数 - 以SetUnhandledExceptionFilter为例编写一个全局异常处理程序
- apue第三版 在信号处理程序中调用不可再入函数 的例子遇到的问题
- svc 报“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。“的HTTP 错误 404.3 – Not Found
- "调用的目标发生了异常。"问题处理
- svc 报“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。“的HTTP 错误 404.3 – Not Found
- 关于windows的safari浏览器的parseInt()函数处理08和09异常问题
- vs2010 Microsoft Visual Studio 无法加载 DLL“UIAutomationCore.dll”: 找不到指定的程序。 (异常来自 HRESULT:0x8007007F) 错误处理方式
- 系统解耦问题-不同系统间dubbo调用的异常处理-ExceptionFilter
- Linux程序异常退出打印调用堆栈
- win32编程中对话框处理函数最后的返回值为TRUE导致了程序异常
- shell脚本中函数调用的返回值,以及退出状态问题
- C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- PHP 的异常处理、错误的抛出及错误回调函数
- HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
- 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常(转)
- 中断处理程序、中断上下文中处理延时及一些函数的调用规则
- 调用Shell脚本无法正常退出的问题处理