利用GetLastError()获得的socket编程中常见错误
常数 | 值 | 描述 | sckOutOfMemory | 7 | 内存不足 | sckInvalidPropertyValue | 380 | 属性值无效。 | sckGetNotSupported | 394 | 属性不可读。 | sckSetNotSupported | 383 | 属性是只读的。 | sckBadState | 40006 | 所请求的事务或请求本身的错误协议或者错误连接状态。 | sckInvalidArg | 40014 | 传递给函数的参数格式不确定,或者不在指定范围内。 | sckSuccess | 40017 | 成功。 | sckUnsupported | 40018 | 不受支持的变量类型。 | sckInvalidOp | 40020 | 在当前状态下的无效操作 | sckOutOfRange | 40021 | 参数越界。 | sckWrongProtocol | 40026 | 所请求的事务或请求本身的错误协议 | sckOpCanceled | 1004 | 取消操作。 | sckInvalidArgument | 10014 | 所请求的地址是广播地址,但未设置标记。 | sckWouldBlock | 10035 | 套接字不成块,而指定操作将使之成块。 | sckInProgress | 10036 | 制造块的 Winsock 操作在进行之中。 | sckAlreadyComplete | 10037 | 完成操作。未进行制造块的操作。 | sckNotSocket | 10038 | 描述符不是套接字。 | sckMsgTooBig | 10040 | 数据报太大,不适于缓冲区的要求,因而被截断。 | sckPortNotSupported | 10043 | 不支持指定的端口。 | sckAddressInUse | 10048 | 地址在使用中。 | sckAddressNotAvailable | 10049 | 来自本地机器的不可用地址。 | sckNetworkSubsystemFailed | 10050 | 网络子系统失败。 | sckNetworkUnreachable | 10051 | 此时不能从主机到达网络。 | sckNetReset | 10052 | 在设置 SO_KEEPALIVE 时连接超时。 | sckConnectAborted | 11053 | 由于超时或者其它失败而中止连接。 | sckConnectionReset | 10054 | 通过远端重新设置连接。 | sckNoBufferSpace | 10055 | 没有可用的缓冲空间。 | sckAlreadyConnected | 10056 | 已连接套接字。 | sckNotConnected | 10057 | 未连接套接字。 | sckSocketShutdown | 10058 | 已关闭套接字。 | sckTimedout | 10060 | 已关闭套接字。 | sckConnectionRefused | 10061 | 强行拒绝连接。 | sckNotInitialized | 10093 | 应首先调用 WinsockInit。 | sckHostNotFound | 11001 | 授权应答:未找到主机。 | sckHostNotFoundTryAgain | 11002 | 非授权应答:未找到主机。 | sckNonRecoverableError | 11003 | 不可恢复的错误。 | sckNoData |
10048错误,地址在使用中。
在创建Socket时,server创建两个Socket,一个用来接受用户请求,另一个却用来处理用户请求(accept返回的Socket).如果在程序编译时出现了此错误。首先应该查看accept返回的Socket是否处理完毕。假如是用多线程实现的,一个线程专门用来处理这个Socket,则应该把该Socket做为参数传进(线程处理函数里面),否则就会出现10048地址占用的错误。可以通过设置SetSockOpt()来设置Socket的状态
|
转载于:https://blog.51cto.com/swellfish/714257