关闭socket 连接函数 windows
时间: 2023-12-31 19:05:12 浏览: 173
在 Windows 平台上,关闭 Socket 连接可以使用 `closesocket` 函数。该函数定义在 `winsock2.h` 头文件中,其语法如下:
```c
int closesocket(SOCKET s);
```
其中,`s` 是需要关闭的 Socket 句柄。
使用该函数时,需要注意以下几点:
1. 调用 `closesocket` 函数将会立即关闭 Socket 连接,不管缓冲区中是否还有数据未发送完毕;
2. 如果在关闭 Socket 连接之前希望将缓冲区中的数据发送完毕,可以使用 `shutdown` 函数;
3. 在关闭 Socket 连接之前,需要先停止对该 Socket 的所有 I/O 操作,以避免出现无法预料的错误。
以下是一个使用 `closesocket` 函数关闭 Socket 连接的示例代码:
```c
#include <winsock2.h>
#include <stdio.h>
int main() {
// 初始化 Winsock 库
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0) {
printf("WSAStartup failed with error: %d\n", result);
return 1;
}
// 创建 Socket
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET) {
printf("socket failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// 连接服务器
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(12345);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
result = connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
if (result == SOCKET_ERROR) {
printf("connect failed with error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
// 发送数据
const char* message = "Hello, world!";
result = send(sock, message, strlen(message), 0);
if (result == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
// 关闭 Socket 连接
result = shutdown(sock, SD_SEND);
if (result == SOCKET_ERROR) {
printf("shutdown failed with error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
result = closesocket(sock);
if (result == SOCKET_ERROR) {
printf("closesocket failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// 清理 Winsock 库
WSACleanup();
return 0;
}
```
阅读全文