diff --git a/Source/DiabloUI/selgame.cpp b/Source/DiabloUI/selgame.cpp index 549668802..8831aa3e8 100644 --- a/Source/DiabloUI/selgame.cpp +++ b/Source/DiabloUI/selgame.cpp @@ -478,7 +478,10 @@ void selgame_Password_Select(int /*value*/) selgame_endMenu = true; } else { selgame_Free(); - UiSelOkDialog(_("Multi Player Game"), SDL_GetError(), false); + std::string error = SDL_GetError(); + if (error.empty()) + error = "Unknown network error"; + UiSelOkDialog(_("Multi Player Game"), error.c_str(), false); LoadBackgroundArt("ui_art\\selgame.pcx"); selgame_Password_Init(selgame_selectedGame); } @@ -496,7 +499,10 @@ void selgame_Password_Select(int /*value*/) selgame_endMenu = true; } else { selgame_Free(); - UiSelOkDialog(_("Multi Player Game"), SDL_GetError(), false); + std::string error = SDL_GetError(); + if (error.empty()) + error = "Unknown network error"; + UiSelOkDialog(_("Multi Player Game"), error.c_str(), false); LoadBackgroundArt("ui_art\\selgame.pcx"); selgame_Password_Init(0); } diff --git a/Source/dvlnet/base_protocol.h b/Source/dvlnet/base_protocol.h index 2270b01f5..af0673817 100644 --- a/Source/dvlnet/base_protocol.h +++ b/Source/dvlnet/base_protocol.h @@ -129,8 +129,7 @@ int base_protocol

::create(std::string addrstr) plr_self = 0; connected_table[plr_self] = true; } - - return (plr_self == PLR_BROADCAST ? MAX_PLRS : plr_self); + return (plr_self == PLR_BROADCAST ? -1 : plr_self); } template @@ -140,7 +139,8 @@ int base_protocol

::join(std::string addrstr) if (wait_network()) if (wait_firstpeer()) wait_join(); - return (plr_self == PLR_BROADCAST ? MAX_PLRS : plr_self); + + return (plr_self == PLR_BROADCAST ? -1 : plr_self); } template diff --git a/Source/dvlnet/protocol_zt.cpp b/Source/dvlnet/protocol_zt.cpp index c90d38b5e..dbc06c8aa 100644 --- a/Source/dvlnet/protocol_zt.cpp +++ b/Source/dvlnet/protocol_zt.cpp @@ -63,6 +63,7 @@ bool protocol_zt::network_online() auto ret = lwip_bind(fd_udp, (struct sockaddr *)&in6, sizeof(in6)); if (ret < 0) { Log("lwip, (udp) bind: {}", strerror(errno)); + SDL_SetError("lwip, (udp) bind: %s", strerror(errno)); throw protocol_exception(); } set_nonblock(fd_udp); @@ -73,11 +74,13 @@ bool protocol_zt::network_online() auto r1 = lwip_bind(fd_tcp, (struct sockaddr *)&in6, sizeof(in6)); if (r1 < 0) { Log("lwip, (tcp) bind: {}", strerror(errno)); + SDL_SetError("lwip, (udp) bind: %s", strerror(errno)); throw protocol_exception(); } auto r2 = lwip_listen(fd_tcp, 10); if (r2 < 0) { Log("lwip, listen: {}", strerror(errno)); + SDL_SetError("lwip, listen: %s", strerror(errno)); throw protocol_exception(); } set_nonblock(fd_tcp); @@ -209,6 +212,7 @@ bool protocol_zt::accept_all() std::copy(in6.sin6_addr.s6_addr, in6.sin6_addr.s6_addr + 16, ep.addr.begin()); if (peer_list[ep].fd != -1) { Log("protocol_zt::accept_all: WARNING: overwriting connection"); + SDL_SetError("protocol_zt::accept_all: WARNING: overwriting connection"); lwip_close(peer_list[ep].fd); } set_nonblock(newfd); @@ -258,6 +262,7 @@ void protocol_zt::disconnect(const endpoint &peer) if (peer_list[peer].fd != -1) { if (lwip_close(peer_list[peer].fd) < 0) { Log("lwip_close: {}", strerror(errno)); + SDL_SetError("lwip_close: %s", strerror(errno)); } } peer_list.erase(peer);