C에서 루프백 소켓을 설정하려고하지만 아무 것도 작동하지 않습니다. 내가 루프백 주소 소켓을 열고 소켓 및 다른 함수에서 데이터를 읽는 함수를 만들려고 노력하고 있지만 아무것도 작동합니다. 연결과 관련된 기능을 사용하는 방법을 모르겠습니다. 여기에 지금까지 수행 할 것입니다 : 요컨대INADDR_LOOPBACK을 사용하는 루프백 예제가 작동하지 않습니다.
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
#include <signal.h>
#include <iostream>
#include <cerrno>
#include <pthread.h>
int internal_s;
void function1(){
if ((internal_s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
perror_exit("socket");
/* Find server address */
struct sockaddr_in loopback;
struct sockaddr *serverptr = (struct sockaddr*)&loopback;
/*Convert port number to integer*/
loopback.sin_family = AF_INET; /* Internet domain */
loopback.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
loopback.sin_port=htons(10000);
/* Initiate connection */
if (bind(internal_s,serverptr, sizeof(loopback))<0)
perro("bind");
int test=1;
err=write(internal_s,&test,sizeof(int));
if(err<0)
perror(write);
}
void Open_Internal_sock(int socket_s){
struct sockaddr_in loopback;
struct sockaddr *serverptr = (struct sockaddr*)&loopback;
/*Convert port number to integer*/
loopback.sin_family = AF_INET; /* Internet domain */
loopback.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
loopback.sin_port=htons(10000);
/* Initiate connection */
if (bind(socket_s,serverptr, sizeof(loopback))<0)
perror("bind");//Invalid argument
int test;
if(read(socket_s,&test,sizeof(int))<0)
perror("read");//herer it prints:Transport endpoint is not connected
}
int main(){
function1(i);
Open_Internal_sock(internal_s);
}
I/O에 연결하거나 수락하지 않는 한 I/O 용 소켓을 사용할 수 없습니다. 당신의 코드는 의미가 없습니다. 루프백은 아무 관계가 없습니다. 진짜 질문이 아닙니다. – EJP
스택 오버플로에 대한 [소켓 프로그래밍을위한 INADDR_ANY 이해] (https://stackoverflow.com/q/16508685/608639)를 참조하십시오. – jww