gpt4 book ai didi

c - x86 和 x86-64 之间的套接字和可移植性

转载 作者:行者123 更新时间:2023-12-02 00:18:06 25 4
gpt4 key购买 nike

让我们举个例子来说明我对这段服务器代码的疑惑:

/* 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 字节)是否会导致问题?
如果是,我该如何解决?

最佳答案

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

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

关于c - x86 和 x86-64 之间的套接字和可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com