inet_ntoa의 작은 문제
2673 단어 net
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char**argv)
{
int listenfd,connfd,n, ret;
struct sockaddr_in servaddr, cliaddr;
socklen_t clilen;
pid_t childpid;
char mesg[1000], *peeraddr;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd < 0) {
printf("create socket error
");
return -1;
}
printf("create socket success
");
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(6789);
ret = bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if (ret == -1) {
printf("bind error
");
return -1;
}
printf("bind success
");
ret = listen(listenfd, 1024);
if (ret == -1) {
printf("listen error
");
return -1;
}
printf("listening...
");
for (;;) {
clilen = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen);
printf("Accept request from %s
", inet_ntoa(cliaddr.sin_addr));
n = read(connfd, mesg, 1000);
if (n < 0) {
printf("read error!
");
}
printf("Received:%s
", mesg);
close(connfd);
}
}
번역 기간에 문제가 발생하지 않았다.실행할 때 프로그램이 47줄에서segmentfault 오류를 받았습니다.man 매뉴얼로 inet_ 보기ntoa, 호출 방식은 다음과 같습니다.
char *inet_ntoa(struct in_addr in);
cliaddr의 유형 정의는 다음과 같습니다.
struct sockaddr_in {/* in netinet/in.h */
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - sizeof(in_port_t), sizeof(struct in_addr)];
};
언뜻 보니 별 문제가 없는데, 어떻게 한 토막의 착오가 생겼을까?
한참 동안 소란을 피워서야 inet_가 부족하다는 것을 알게 되었다ntoa가 있는 헤더 파일arpa/inet.h, 이 헤더 파일을 포함하면 됩니다.좋은 구덩이.
BTW, 이후 inet_ 사용 최소화ntoa, inet_ntop이 대신합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HTTP Request in TCP파이썬으로 개발된 OCR 서버와 TCP로 이미지 데이터를 http 형식으로 전송하는 방법을 알아내기 위해, Node.js 의 내장 모듈 을 사용했다. 설명 http는 Content-Type에 따라 Body의 구조가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.