<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Problem with TCP sockets after Warm start</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/0f94ac4943/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/0f94ac4943/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/0f94ac4943/</id><updated>2020-02-27T13:51:48.053000Z</updated><subtitle>Recent posts to Problem with TCP sockets after Warm start</subtitle><entry><title>Problem with TCP sockets after Warm start</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/0f94ac4943/?limit=25#6fd9" rel="alternate"/><published>2020-02-27T13:51:48.053000Z</published><updated>2020-02-27T13:51:48.053000Z</updated><author><name>danyamian</name><uri>https://forge.codesys.com/u/danyamian/</uri></author><id>https://forge.codesys.com05884448e0a012003bee547df5f95ada1d7f7d73</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DaveW hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
Hi&lt;br/&gt;
I am using V3.4sp1 on a windows CE PLC. I use TPC/IP sockets for communication, and listen for a connection like this&lt;br/&gt;
    CASE TCPState OF&lt;br/&gt;
        0:   // Create a Socket&lt;br/&gt;
            SocketCreateHandle := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, 0, ADR(SocketError)); &lt;br/&gt;
            IF SocketCreateHandle &amp;lt;&amp;gt; SysTypes.RTS_INVALID_HANDLE THEN&lt;br/&gt;
                dwValue := 1;&lt;br/&gt;
                // Set the option that we can reuse 'old' port addresses&lt;br/&gt;
                SocketError := SysSockSetOption(SocketCreateHandle, &lt;br/&gt;
                                SOCKET_SOL, SOCKET_SO_REUSEADDR, ADR(dwValue), SIZEOF (dwValue));&lt;br/&gt;
                TCPState := 10;&lt;br/&gt;
            END_IF&lt;br/&gt;
        10:  // Bind the socket to our IP address and port&lt;br/&gt;
            SocketAddress.sin_family := SOCKET_AF_INET ;&lt;br/&gt;
            SocketError := SysSockInetAddr(InetAddr, ADR(SocketAddress.sin_addr));&lt;br/&gt;
            SocketAddress.sin_port := SysSockHtons(TCP_LEUTWIL);&lt;br/&gt;
            bResult := SysSockBind(SocketCreateHandle, ADR(SocketAddress), SIZEOF(SocketAddress));&lt;br/&gt;
            IF bResult &amp;lt;&amp;gt; SysTypes.RTS_INVALID_HANDLE THEN&lt;br/&gt;
                TCPState := 20;&lt;br/&gt;
            END_IF&lt;br/&gt;
        20:  // Listen for a connection&lt;br/&gt;
            bResult := SysSockListen(SocketCreateHandle, diMaxConnections);&lt;br/&gt;
            IF bResult &amp;lt;&amp;gt; SysTypes.RTS_INVALID_HANDLE THEN&lt;br/&gt;
                MasterSocketList.fd_count := 1; // only socket is the listening&lt;br/&gt;
                MasterSocketList.fd_array&lt;span&gt;[0]&lt;/span&gt; := SocketCreateHandle;&lt;br/&gt;
                dwValue := 1;&lt;br/&gt;
                //SysSockIoctl(SocketCreateHandle, SOCKET_FIONBIO, ADR(dwValue)); // set to non blocking&lt;br/&gt;
                TCPState := 30;&lt;br/&gt;
            END_IF&lt;br/&gt;
        30:  // Build a list of open sockets and use select to detect activity (read)&lt;br/&gt;
            FDCopy(); // Copy master list to slave&lt;br/&gt;
            SelectTimeOut.tv_sec := 0;&lt;br/&gt;
            SelectTimeOut.tv_usec := 10; // very short time out&lt;br/&gt;
            bResult := SysSockSelect(SOCKET_FD_SETSIZE, ADR(SlaveSocketList), 0, 0, ADR(SelectTimeOut), ADR(diSize));&lt;br/&gt;
            IF diSize &amp;gt; 0 THEN  // Positive result sockets have activity (count of active sockets)&lt;br/&gt;
                TCPState := 40;&lt;br/&gt;
                TCPindex := 0;&lt;br/&gt;
            END_IF&lt;br/&gt;
But after a warm start very often I can no longer connect to the PLC with TCP. The application is still running in state 30 above but socket will not accept a connection. Anybody got any ideas or is it a problem with the library ?&lt;br/&gt;
Regards&lt;br/&gt;
Dave W&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi, I'm working on a similar project. I have a raspberry in which I need to run a TCP server where I will receive messages from clients by sockets. I can not get it to work properly, have you managed to get it to work properly? Do you have more information about the server or an example project?&lt;/p&gt;
&lt;p&gt;Thank you very much.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Problem with TCP sockets after Warm start</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/0f94ac4943/?limit=25#784b" rel="alternate"/><published>2020-02-27T13:51:47.809000Z</published><updated>2020-02-27T13:51:47.809000Z</updated><author><name>DaveW</name><uri>https://forge.codesys.com/u/davew/</uri></author><id>https://forge.codesys.coma19c91ab746a33e9496dd2df4d0a187aea3dfd53</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;I am using V3.4sp1 on a windows CE PLC. I use TPC/IP sockets for communication, and listen for a connection like this&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;CASE&lt;/span&gt; &lt;span class="nv"&gt;TCPState&lt;/span&gt; &lt;span class="nv"&gt;OF&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt;:   &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Create&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;Socket&lt;/span&gt;
        &lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockCreate&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SOCKET_AF_INET&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_STREAM&lt;/span&gt;, &lt;span class="mi"&gt;0&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketError&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;; &lt;/span&gt;
        &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;SysTypes&lt;/span&gt;.&lt;span class="nv"&gt;RTS_INVALID_HANDLE&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
            &lt;span class="nv"&gt;dwValue&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Set&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;option&lt;/span&gt; &lt;span class="nv"&gt;that&lt;/span&gt; &lt;span class="nv"&gt;we&lt;/span&gt; &lt;span class="nv"&gt;can&lt;/span&gt; &lt;span class="nv"&gt;reuse&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;old&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="nv"&gt;port&lt;/span&gt; &lt;span class="nv"&gt;addresses&lt;/span&gt;
            &lt;span class="nv"&gt;SocketError&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockSetOption&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt;, 
                            &lt;span class="nv"&gt;SOCKET_SOL&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_SO_REUSEADDR&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;dwValue&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, &lt;span class="nv"&gt;SIZEOF&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;dwValue&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;TCPState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;END_IF&lt;/span&gt;
    &lt;span class="mi"&gt;10&lt;/span&gt;:  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Bind&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;socket&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;our&lt;/span&gt; &lt;span class="nv"&gt;IP&lt;/span&gt; &lt;span class="nv"&gt;address&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;port&lt;/span&gt;
        &lt;span class="nv"&gt;SocketAddress&lt;/span&gt;.&lt;span class="nv"&gt;sin_family&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SOCKET_AF_INET&lt;/span&gt; &lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;SocketError&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockInetAddr&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;InetAddr&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketAddress&lt;/span&gt;.&lt;span class="nv"&gt;sin_addr&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;SocketAddress&lt;/span&gt;.&lt;span class="nv"&gt;sin_port&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockHtons&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;TCP_LEUTWIL&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;bResult&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockBind&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketAddress&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, &lt;span class="nv"&gt;SIZEOF&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketAddress&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;bResult&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;SysTypes&lt;/span&gt;.&lt;span class="nv"&gt;RTS_INVALID_HANDLE&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
            &lt;span class="nv"&gt;TCPState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;END_IF&lt;/span&gt;
    &lt;span class="mi"&gt;20&lt;/span&gt;:  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Listen&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;connection&lt;/span&gt;
        &lt;span class="nv"&gt;bResult&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockListen&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt;, &lt;span class="nv"&gt;diMaxConnections&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;bResult&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;SysTypes&lt;/span&gt;.&lt;span class="nv"&gt;RTS_INVALID_HANDLE&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
            &lt;span class="nv"&gt;MasterSocketList&lt;/span&gt;.&lt;span class="nv"&gt;fd_count&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;; // only socket is the listening&lt;/span&gt;
            &lt;span class="nv"&gt;MasterSocketList&lt;/span&gt;.&lt;span class="nv"&gt;fd_array&lt;/span&gt;[&lt;span class="mi"&gt;0&lt;/span&gt;] :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;dwValue&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;SysSockIoctl&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SocketCreateHandle&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_FIONBIO&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;dwValue&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;; // set to non blocking&lt;/span&gt;
            &lt;span class="nv"&gt;TCPState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;END_IF&lt;/span&gt;
    &lt;span class="mi"&gt;30&lt;/span&gt;:  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Build&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;list&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;open&lt;/span&gt; &lt;span class="nv"&gt;sockets&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;select&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;detect&lt;/span&gt; &lt;span class="nv"&gt;activity&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;read&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
        &lt;span class="nv"&gt;FDCopy&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;; // Copy master list to slave&lt;/span&gt;
        &lt;span class="nv"&gt;SelectTimeOut&lt;/span&gt;.&lt;span class="nv"&gt;tv_sec&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;SelectTimeOut&lt;/span&gt;.&lt;span class="nv"&gt;tv_usec&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="c1"&gt;; // very short time out&lt;/span&gt;
        &lt;span class="nv"&gt;bResult&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysSockSelect&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SOCKET_FD_SETSIZE&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SlaveSocketList&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, &lt;span class="mi"&gt;0&lt;/span&gt;, &lt;span class="mi"&gt;0&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;SelectTimeOut&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;diSize&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;diSize&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;  &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Positive&lt;/span&gt; &lt;span class="nb"&gt;result&lt;/span&gt; &lt;span class="nv"&gt;sockets&lt;/span&gt; &lt;span class="nv"&gt;have&lt;/span&gt; &lt;span class="nv"&gt;activity&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;active&lt;/span&gt; &lt;span class="nv"&gt;sockets&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;TCPState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;TCPindex&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;But after a warm start very often I can no longer connect to the PLC with TCP. The application is still running in state 30 above but socket will not accept a connection. Anybody got any ideas or is it a problem with the library ?&lt;/p&gt;
&lt;p&gt;Regards&lt;/p&gt;
&lt;p&gt;Dave W&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>