3

让我们以我对这个服务器代码的怀疑为例:

/* some code */
void *filebuffer = NULL;
/* some other code */

for (size_to_send = fsize; size_to_send > 0; ){
  rc = sendfile(f_sockd, fd, &offset, size_to_send);
  if (rc <= 0){
    perror("sendfile");
    onexit(f_sockd, m_sockd, fd, 3);
  }
  size_to_send -= rc;
}

/* 其他代码 */

这个客户代码:

/* some code */
void *filebuffer;
/*some other code */
for(size_to_receive = fsize; size_to_receive > 0;){
  nread = read(f_sockd, filebuffer, size_to_receive);
  if(nread < 0){
    perror("read error on retr");
    onexit(f_sockd, 0, 0, 1);
  }
  if(write(fd, filebuffer, nread) != nread){
    perror("write error on retr");
    onexit(f_sockd, 0, 0, 1);
  }
  size_to_receive -= nread;
}
/* other code */

我的问题是:如果服务器在 x86 机器(小端)上,而客户端在 x64 机器(小端)上,指针不同大小(4-8 字节)会导致问题吗?
如果是,我该如何解决?

4

1 回答 1

3

不,这不是问题,因为您实际上并没有通过套接字发送指针,只是一个字节流。我看到的唯一问题是文件是否是二进制数据并且其中包含 64 位整数,并且接收平台是 32 位而不支持 64 位整数(例如long long),但是,除非您正在接收,否则这不太可能一个嵌入式系统。

PS。在您的接收循环中,您检查读取错误,但不检查另一端关闭的套接字(read返回时0。)

于 2012-09-03T06:07:47.647 回答