我正在编写一个与PF_RDS套接字一起使用的简单服务器。我用创建套接字,
rds_soc = socket(PF_RDS,SOCK_SEQPACKET,0);
由于我试图通过TCP使用RDS,因此我设置了以下套接字选项。
getsockopt(rds_soc,SOL_RDS,SO_RDS_TRANSPORT,(void*)RDS_TRANS_TCP,(socklen_t*)sizeof(RDS_TRANS_TCP)));
我正在声明sockadd_in结构,其中包含我希望套接字绑定到的IP地址和端口。
struct sockaddr_in servaddr;
int port=8888;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = PF_RDS;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_port = htons(port);
现在,我尝试绑定套接字。
bind(rds_soc, (struct sockaddr *)(&servaddr), sizeof(servaddr));
bind函数返回值22。EINVAL错误。 bind()的手册page说,当套接字不是AF_UNIX系列的一部分时,会发生EINVAL错误。但是,正如您在代码中看到的那样,我希望套接字成为PF_RDS系列的一部分。
由于我是网络编程的新手,所以我们将不胜感激。我要提到的是网页和文档的链接,编写代码时从中获得了参考。
我还在Linux中使用启用了rds_tcp模块,
modprobe rds_tcp
并确认模块已加载。