《PHP實(shí)戰(zhàn):PHP中的socket_read和socket_recv區(qū)別詳解》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):PHP中的socket_read和socket_recv區(qū)別詳解,希望對您有用。如果有疑問,可以聯(lián)系我們。
前幾天用PHP寫一個(gè)socket網(wǎng)絡(luò)服務(wù),在文檔里看到socket_read和socket_recv這兩個(gè)辦法時(shí)有點(diǎn)暈,乍一看這不是一樣的嘛,干嗎還要給兩個(gè)不同的用法呢.看文檔沒看太明白,看了下源碼才搞清楚,在這里記錄一下.PHP應(yīng)用
先看一下這兩個(gè)函數(shù)的聲明:
PHP應(yīng)用
??? if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzll", &php_sock_res, &buf, &len, &flags) == FAILURE) {
??????? return;
??? }PHP應(yīng)用
??? ZEND_FETCH_RESOURCE(php_sock, php_socket *, &php_sock_res, -1, le_socket_name, le_socket);PHP應(yīng)用
??? /* overflow check */
??? if ((len + 1) < 2) {
??????? RETURN_FALSE;
??? }PHP應(yīng)用
??? recv_buf = emalloc(len + 1);
??? memset(recv_buf, 0, len + 1);PHP應(yīng)用
??? if ((retval = recv(php_sock->bsd_socket, recv_buf, len, flags)) < 1) {
??????? efree(recv_buf);PHP應(yīng)用
??????? zval_dtor(buf);
??????? Z_TYPE_P(buf) = IS_NULL;
??? } else {
??????? recv_buf[retval] = '\0';PHP應(yīng)用
??????? /* Rebuild buffer zval */
??????? zval_dtor(buf);PHP應(yīng)用
??????? Z_STRVAL_P(buf) = recv_buf;
??????? Z_STRLEN_P(buf) = retval;
??????? Z_TYPE_P(buf) = IS_STRING;
??? }PHP應(yīng)用
??? if (retval == -1) {
??????? PHP_SOCKET_ERROR(php_sock, "unable to read from socket", errno);
??????? RETURN_FALSE;
??? }PHP應(yīng)用
??? RETURN_LONG(retval);
}
PHP應(yīng)用
亂淮蠖眩涫滌幸恍兇罟丶
PHP應(yīng)用
??????? if (no_read > 200) {
??????????? set_errno(ECONNRESET);
??????????? return -1;
??????? }
??? }PHP應(yīng)用
??? if (n < maxlen) {
??????? m = recv(sock->bsd_socket, (void *) t, 1, flags);
??? }PHP應(yīng)用
??? if (errno != 0 && errno != ESPIPE && errno != EAGAIN) {
??????? return -1;
??? }PHP應(yīng)用
??? set_errno(0);
}
PHP應(yīng)用
雖然這兩個(gè)函數(shù)比擬混亂,但是看到這里應(yīng)該明白了吧!好了睡覺去啦!PHP應(yīng)用
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP實(shí)戰(zhàn):PHP中的socket_read和socket_recv區(qū)別詳解》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/12440.html