我正在通過UNIX網絡編程中的示例工作,並且已將「daytimeclientcli.c」改編爲此處特定於linux的代碼(這些示例使用BSD)。我已經在here上對時間服務器運行該程序。無論服務器是否爲connect error: Operation not permitted
這是從connect()調用返回的值。我搜查了四周,但我找不到與此相關的任何內容。任何幫助是極大的讚賞。connect()錯誤:操作不允許
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#define BUFFER 80
int main(int argc, char **argv) {
int sockfd;
int n;
char buf[BUFFER+1];
struct sockaddr_in servaddr;
/* need a pointer to socketaddr for call to connect() */
struct sockaddr* ptr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
fprintf(stderr, "socket error\n");
return 2;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
if (inet_pton(AF_INET, argv[1], &servaddr) <= 0) {
fprintf(stderr, "inet_pton error for %s\n", argv[1]);
return 3;
}
ptr = (struct sockaddr*) &servaddr;
if (err = connect(sockfd, ptr, sizeof(servaddr)) < 0) {
fprintf(stderr, "connect error: %s\n", strerror(err));
return 4;
}
/* read from socket */
while ((n = read(sockfd, buf, BUFFER)) > 0);
if (n < 0) {
fprintf(stderr, "read error: %d\n", n);
return 5;
} else {
/* null-terminate the buffer */
buf[n] = 0;
printf("%s\n", buf);
}
if (n < 0) {
fprintf(stderr, "read error");
return 5;
}
return 0;
}
您可能需要root權限。 – Kludas 2012-07-15 04:13:43
不應該需要root權限,但是你有防火牆規則阻止端口傳出嗎? – 2012-07-15 04:20:12