2014-06-14 2 views
2

이 질문에 적어도 12 번 질문했습니다. 어떤 응답도 나를 도왔습니다.socket_bind() : 주소를 바인딩 할 수 없습니다.

코드 :

$host = "127.0.0.1"; 
$port = 80; 

//no timeout 
set_time_limit(0); 

//create socket 
$socket=socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 


if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) { 
    echo socket_strerror(socket_last_error($socket)); 
    exit; 
} 

$result = socket_bind($socket, $host, $port) or die("Could not bind socket\n"); 

한 응답이에 넣어 제안하기 때문에 문이 추가 된 '경우'. 나에게 아무 것도하지 않는 것 같았다. 나는 그것을 꺼낼 계획이다. 어쨌든, 내 오류 :

경고 : socket_bind() : 주소를 바인딩 할 수 없습니다 [10013] : 액세스 권한에 의해 금지 된 방식으로 소켓에 액세스하려고했습니다.

그리고 예, 포트가 다른 프로세스에서 사용 중임을 의미합니다. 포트 번호를 약 30 번 변경했습니다. 일시적으로 내 (Windows 8) 방화벽을 껐습니다. 나는 netstat을 실행했고,이 포트들이 닫히지 않아 동일한 PID와 이름을 가진 30 개의 소켓을 가지고 있다는 것을 알았다.

내 질문은 : 내가 뭘 잘못하고있는 걸까요?

+0

이 코드는 모두 잘 돌아갑니다. 포트와 관련이 있습니다. – Xatenev

+0

높은 권한으로 프로세스 실행 시도 – dvasanth

+0

관리자 권한으로 명령 프롬프트를 사용하여 php.exe를 실행했습니다. 같은 반응. –

답변

1

1024보다 작은 포트에 바인딩하려면 프로세스에 권한있는 권한이 필요합니다. 전형적인 루트 만이 이것을 할 수 있습니다. 응답,하지만 난 내 자신의 문제를 파악하는 것과 Is there a way for non-root processes to bind to "privileged" ports on Linux?

+0

포트 번호는 중요하지 않습니다. 내가 말했듯이, 나는 30 개의 포트를 시도했다. 나는 804와 443이 1024 이하에서 사용 된 유일한 두 가지라고 확신한다. 다른 모든 것들은 65000 미만의 무작위 수를 선택했다. 나는 1024보다 큰 수를 유지했지만, 여전히 같은 오류가 발생한다. –

1

감사 : 여기 읽어 보시기 바랍니다이 항목에 대한 자세한 설명을 위해

. 내가 사용한 튜토리얼은 server.php 파일을 탐색하는 데 사용되었다. 웃지 마라. 그러나 나는 브라우저를 통해 거기를 탐험했다. 그래서, 그 메시지는 내 브라우저에 나타났습니다.

명령 프롬프트에서 동일한 파일을 실행했는데 오류가 발생하거나 선택한 포트에 따라 걸려있는 것처럼 보입니다. 그것은 부서지는 것이 아니라 단지 출력 할 것이 없었습니다. 나는 그것을 출력 해 주었다. (예.

어쨌든, 다시 한 번 감사드립니다.

+0

당신은 당신 자신의 대답을 받아 들일 수 있습니다. 그래서이 질문은 "닫힙니다". – alk

1

자주이 오류가 발생하는 이유는 사용하려는 소켓이 이미 다른 프로그램에서 사용 중이기 때문입니다. 포트 80에서 수신 대기하는 소켓을 열려고 시도하는 중, 어떤 포트가 수신 대기 중인가? 포트 80이라면 문제가 있습니다.

관련 문제