【问题标题】:DCCP Socket programming in CC中的DCCP套接字编程
【发布时间】:2013-06-05 04:48:52
【问题描述】:

我尝试在 c 中为 DCCP 协议创建套接字,它没有错误,但是当我运行程序时出现错误“sendto: Broken pipe”

我已经包含了 necesseray 标头定义。

#define SOCK_DCCP 6 #define IPPROTO_DCCP 33 #define SOL_DCCP 269

在我想创建套接字的函数中

int dccp_sockfd,port_num,addr_len,yes = 1;

struct sockaddr_in PMU_addr,their_addr;

struct Lower_Layer_Details *temp_pmu = (struct Lower_Layer_Details *) temp;

unsigned char *dccp_BUF,*ptr,length[2];

unsigned int flen;

uint16_t cal_crc,frame_crc;

port_num = temp_pmu->port;

struct Lower_Layer_Details *t ;


if ((dccp_sockfd = socket(AF_INET, SOCK_DCCP, IPPROTO_DCCP)) == -1) {
    perror("socket");
    exit(1);
}

if (setsockopt(dccp_sockfd,SOL_DCCP,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
    perror("setsockopt");
    exit(1); 

dccp_BUF = malloc(MAXBUFLEN* sizeof(unsigned char));

addr_len = sizeof(struct sockaddr); 
int n,bytes_read;
unsigned char *cmdframe = malloc(19);
cmdframe[18] = '\0';
create_command_frame(1,temp_pmu->pmuid,(char *)cmdframe);


if ((n = sendto(dccp_sockfd,cmdframe, 18, 0, (struct sockaddr *)&PMU_addr,sizeof(PMU_addr)) == -1)) {

    perror("sendto"); 

} else {

【问题讨论】:

  • IPPROTO_DCCP还是你定义的其他宏?另外,您应该在sendto 周围显示代码
  • IPPROTO_DCCP 和其他宏由协议定义,我已经包含在代码的 sendto 部分上方
  • 有 1.5k 代表的人可能会在这个问题中添加 DCCP 标签,即使它非常通用。

标签: c sockets dccp


【解决方案1】:

你打电话给connect()还是bind()listen()?当前代码 sn-ps 不显示这些。如果缺少这些,请尝试添加它们。为了让我们能够更好地帮助您,请提出问题SSCCE

如果您的平台是 Linux,请阅读http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp,尤其是“C 应用程序编程接口到 DCCP”部分。

【讨论】:

  • 是的,我错过了调用 connect(),这就是问题所在。我非常感谢您的帮助
  • 如果答案正确且有帮助,请accept它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
相关资源
最近更新 更多