Socket_bind () 함수는 생성 된 소켓을 특정 IP 주소 및 포트에 바인딩하는 데 사용되므로 소켓이 해당 주소 및 포트에서 네트워크 연결 요청을 수락 할 수 있습니다.
<span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);
</span></span>
$ 소켓 : 바인딩 해야하는 소켓 리소스.
$ 주소 : 서버의 IP 주소 ( LocalHost 또는 0.0.0.0 등일 수 있음).
$ 포트 : 바인딩 할 포트 번호.
바인딩이 성공하면 true를 반환하고 실패하면 거짓입니다 .
socket_bind () 가 성공했는지 여부를 감지하려면 먼저 함수의 반환 값을 명확히해야합니다. 성공에 대해 사실을 반환하고 실패에 대해서는 거짓을 반환합니다. 그러나 반환 값에만 의존하는 것만으로는 충분하지 않습니다. Socket_last_error ()를 결합하여보다 자세한 오류 정보를 얻을 수도 있습니다.
socket_bind ()를 사용할 때는 일반적으로 반환 값을 확인하여 성공 여부를 확인합니다. 반환 값이 False 인 경우 바인딩이 실패했음을 의미합니다.
<span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socket 창조가 실패했습니다: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>());
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-variable">$address</span></span><span> = </span><span><span class="hljs-string">"127.0.0.1"</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socket 바인딩이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>));
</span><span><span class="hljs-keyword">exit</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socket 구속력이 성공!"</span></span><span>;
}
</span></span>
socket_bind ()가 false를 반환하면 socket_last_error ()를 사용하여 더 많은 오류 정보를 얻으십시오. socket_last_error ()는 오류 코드를 반환합니다. 오류 코드는 Socket_Strerror ()를 사용하여 이해하기 쉬운 오류 정보로 변환 할 수 있습니다.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-variable">$error_code</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-variable">$error_message</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-variable">$error_code</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"바인딩이 실패했습니다,오류 코드:<span class="hljs-subst">$error_code</span></span></span><span>,오류 메시지:</span><span><span class="hljs-subst">$error_message</span></span><span>";
}
</span></span>
일반적인 오류 메시지는 다음과 같습니다.
이미 사용중인 주소
허가 거부
이미 사용중인 주소
오류의 원인 : IP 주소와 포트는 다른 프로세스에 의해 구속되었습니다.
해결책 : 다른 프로그램이 포트를 사용하고 있는지 확인하거나 사용 된 포트 번호를 변경하십시오.
허가 거부
오류의 원인 : 현재 사용자는 포트에 바인딩하기에 충분한 권한이 없습니다 (특히 1024 미만의 포트).
해결책 : 더 높은 포트를 사용하거나 관리자 권한으로 스크립트를 실행하십시오.
잘못된 주장
오류의 원인 : Socket_bind () 로 전달 된 IP 주소 또는 포트가 올바르지 않습니다.
솔루션 : 들어오는 주소와 포트가 유효한지 확인하십시오.
바운드 소켓이 여전히 유효한지 프로그램을 확인하려면 Socket_getSockName ()을 사용하여 현재 바인딩 된 소켓의 주소와 포트를 가져올 수 있습니다. 이 함수는 바인딩 정보를 반환하고 성공적인 바인딩이 없으면 반환 값이 비어 있습니다.
<span><span><span class="hljs-variable">$bound_address</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$bound_port</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">socket_getsockname</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$bound_address</span></span><span>, </span><span><span class="hljs-variable">$bound_port</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"주소에 묶여있는 소켓 <span class="hljs-subst">$bound_address</span></span></span><span> 그리고 포트 </span><span><span class="hljs-subst">$bound_port</span></span><span>";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"套接字바인딩이 실패했습니다"</span></span><span>;
}
</span></span>