小编tec*_*eak的帖子

bind()与SO_REUSEADDR失败

我的任务是实现在通过TCP连接的两台计算机之间玩的双人游戏.其中一个要求是只有获胜者才能再次参加比赛.如果服务器获胜并决定不进一步播放,则客户端应作为服务器重新启动并接受新连接.

我的方法:如果游戏丢失(在客户端模式下),关闭sockfd并重新创建另一个.然后使用setsockopt允许使用SO_REUSEADDR重新绑定,然后调用bind.

int yes = 1;
if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 )
{
    perror("setsockopt");
}

if ( bind(sockfd, (struct sockaddr*)&svr, sizeof(svr) ) == -1 )
{
    perror("server: bind");
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然得到相同的"地址已被使用"错误.在尝试重新创建套接字之前,我已经尝试过休眠150秒,这种方法很有效.

注意:我在同一台PC上测试它.它可能适用于两台连接的PC,但必须使其在同一台PC上运行.请帮忙.

c sockets bind

6
推荐指数
1
解决办法
3万
查看次数

CUDA在单个内核启动中执行块的顺序

我总共推出了256个线程.当我通过启动单个块来执行此操作时,一切正常.但是当我用2x2块(8x8线程)启动线程时,内核无限循环.好吧,真正的问题是我的内核代码等待来自其他块的部分结果,并且在运行多个测试之后,我观察到块以随机顺序启动并且它们似乎按顺序执行.

如果CUDA块从同一个内核启动,它们会并行运行吗?我正在使用的GPU不是限制因为我只启动256个线程而GTX 580可以处理它们.(在16x16线程的单个块启动中一切正常)有没有办法可以知道执行的顺序还是指定它?

cuda

0
推荐指数
1
解决办法
2652
查看次数

标签 统计

bind ×1

c ×1

cuda ×1

sockets ×1