繁体   English   中英

connect()错误:不允许操作

[英]connect() error: operation not permitted

我正在通过UNIX网络编程中的示例进行操作,并且我已经将“daytimeclientcli.c”改编为此代码,这是特定于Linux的(这些示例使用BSD)。 我在这里针对时间服务器运行程序。 无论服务器我得到connect error: Operation not permitted ,这是调用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;
}

connect()调用失败,因为servaddr尚未正确初始化。 在对inet_pton()的调用中,尝试将“&serv_addr”更改为“&serv_addr.sin_addr”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM