1. 套接字创建失败(socket()
失败)
- 错误原因:系统资源不足、参数设置错误等。
- 处理方式:使用
perror()
打印错误信息,并根据错误码决定后续操作,如退出程序或重试。
- 代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 后续代码...
close(sockfd);
return 0;
}
2. 连接失败(connect()
失败)
- 错误原因:目标主机不可达、端口未开放等。
- 处理方式:同样使用
perror()
打印错误信息,根据具体情况决定是否重试连接。
- 代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
perror("connect failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// 后续代码...
close(sockfd);
return 0;
}
3. 绑定失败(bind()
失败)
- 错误原因:端口已被占用、地址使用不当等。
- 处理方式:通过
perror()
打印错误信息,若端口被占用可尝试更换端口。
- 代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
perror("bind failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// 后续代码...
close(sockfd);
return 0;
}