SerialComms: compilation in linux.

1) static variables must be defined (otherwise it becomes optimisation-dependent)

2) ensure the socket is closed if an error is detected
This commit is contained in:
Andrea Odetti 2023-08-28 11:00:39 +01:00
parent cd2f29b723
commit c1c7c0ff82
2 changed files with 6 additions and 1 deletions

View File

@ -47,6 +47,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#define TCP_SERIAL_PORT 1977
const UINT CSuperSerialCard::SERIALPORTITEM_INVALID_COM_PORT = 0;
// Default: 9600-8-N-1
SSC_DIPSW CSuperSerialCard::m_DIPSWDefault =
{
@ -241,6 +243,7 @@ bool CSuperSerialCard::CheckComm()
saAddress.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(m_hCommListenSocket, (LPSOCKADDR)&saAddress, sizeof(saAddress)) == SOCKET_ERROR)
{
closesocket(m_hCommListenSocket);
m_hCommListenSocket = INVALID_SOCKET;
WSACleanup();
return false;
@ -249,6 +252,7 @@ bool CSuperSerialCard::CheckComm()
// bound, so listen
if (listen(m_hCommListenSocket, 1) == SOCKET_ERROR)
{
closesocket(m_hCommListenSocket);
m_hCommListenSocket = INVALID_SOCKET;
WSACleanup();
return false;
@ -261,6 +265,7 @@ bool CSuperSerialCard::CheckComm()
/* unsigned int wMsg */ WM_USER_TCP_SERIAL,
/* long lEvent */ (FD_ACCEPT | FD_CONNECT | FD_READ | FD_CLOSE)) != 0)
{
closesocket(m_hCommListenSocket);
m_hCommListenSocket = INVALID_SOCKET;
WSACleanup();
return false;

View File

@ -88,7 +88,7 @@ private:
std::string m_currentSerialPortName;
DWORD m_dwSerialPortItem;
static const UINT SERIALPORTITEM_INVALID_COM_PORT = 0;
static const UINT SERIALPORTITEM_INVALID_COM_PORT;
std::vector<UINT> m_vecSerialPortsItems; // Includes "None" & "TCP" items
std::string m_strSerialPortChoices;
UINT m_uTCPChoiceItemIdx;