<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Problem with SysSockRecv function</title><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/8552766e95/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/8552766e95/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/CODESYS-V2/thread/8552766e95/</id><updated>2021-02-24T18:00:04.547000Z</updated><subtitle>Recent posts to Problem with SysSockRecv function</subtitle><entry><title>Problem with SysSockRecv function</title><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/8552766e95/?limit=25#4253" rel="alternate"/><published>2021-02-24T18:00:04.547000Z</published><updated>2021-02-24T18:00:04.547000Z</updated><author><name>ray2020</name><uri>https://forge.codesys.com/u/ray2020/</uri></author><id>https://forge.codesys.com68ca56d33a1fb7049d218b8519fb310d134d7973</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;did you able to send and receive data later ?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Problem with SysSockRecv function</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/8552766e95/?limit=25#9cbf" rel="alternate"/><published>2020-02-27T18:57:10.459000Z</published><updated>2020-02-27T18:57:10.459000Z</updated><author><name>mpi</name><uri>https://forge.codesys.com/u/mpi/</uri></author><id>https://forge.codesys.com2c24206b815c3adfd19666479af04609b560caf7</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello &lt;br/&gt;
Me again&lt;br/&gt;
Actually I have found where  the problem came from. The code was ok but the format of the command I used was missing a new line character at the end (what was  not said in the notice).&lt;br/&gt;
I have managed to see that using Wireshark a freeware that allows tcp frame inspection on the net. There I saw that the '0a' character was missing compared to the utility software provided by the manufacturer.&lt;br/&gt;
Though nobody answered I have thought It might be usefull to some of you to have a clue on how to debug this kind of problem. &lt;br/&gt;
Michel&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Problem with SysSockRecv function</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/8552766e95/?limit=25#a2eb" rel="alternate"/><published>2020-02-27T18:57:09.042000Z</published><updated>2020-02-27T18:57:09.042000Z</updated><author><name>mpi</name><uri>https://forge.codesys.com/u/mpi/</uri></author><id>https://forge.codesys.com2a9dc4a67954cd8554c8c50f0974446119910530</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I am running a wago PFC200 PLC and try to drive a equipment using ethernet TCP protocol under Codesys V2.3. I am able to  create and connect a socket,  send data and close the socket. Yet each time I want to receive data, that I know to be send by the equipment the connexion got stuck and I just have to switch on and of the equipment and restart my PLC.&lt;/p&gt;
&lt;p&gt;When I check if the equipement is ready to send back data using SysSockSelect, it returns 0, meaning that it is not ready to talk although it does send data. If I don't use the SysSockSelect and go straight to SysSockRecv then the program got stuck.&lt;/p&gt;
&lt;p&gt;Does anyone have an idea ?&lt;/p&gt;
&lt;p&gt;Thank for your help.&lt;/p&gt;
&lt;p&gt;Michel&lt;/p&gt;
&lt;p&gt;PROGRAM PLC_PRG&lt;br/&gt;
VAR&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;sendBt&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;recvBT&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;


&lt;span class="n"&gt;strLec&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;strEcr&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;):=&lt;/span&gt;&lt;span class="s1"&gt;':FREQ:21.2345MHz'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;openSocket&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;closeSocket&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;


&lt;span class="n"&gt;diSocket&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DINT&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;iPort&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;INT&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="mi"&gt;9760&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;stDestIPAddress&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s1"&gt;'192.168.9.47'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;bySend&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s1"&gt;':IDN?'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;byRecv&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;xx&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;INT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;yy&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;DINT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;nbS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;INT&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;nbR&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;INT&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_VAR&lt;/p&gt;
&lt;p&gt;IF openSocket THEN&lt;br/&gt;
        openSocket:=FALSE;&lt;br/&gt;
        IF(diSocket=-1) THEN&lt;br/&gt;
        diSocket := TcpClientOpenSocket(iPort, stDestIPAddress, 1000);&lt;br/&gt;
        END_IF&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;IF recvBt THEN&lt;br/&gt;
    IF  diSocket &amp;lt;&amp;gt; -1 THEN&lt;br/&gt;
        TcpReceiveData(diSocket, ADR(byRecv), SIZEOF(byRecv), 2);&lt;br/&gt;
    END_IF&lt;br/&gt;
recvBt:=FALSE;&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;IF sendBt THEN&lt;br/&gt;
    IF  diSocket &amp;lt;&amp;gt; -1 THEN&lt;br/&gt;
        TcpSendData(diSocket, ADR(bySend), SIZEOF(bySend), 2);&lt;br/&gt;
    END_IF&lt;br/&gt;
sendBt:=FALSE;&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;IF closeSocket THEN&lt;br/&gt;
        closeSocket := FALSE;&lt;br/&gt;
        SysSockClose(diSocket:=diSocket);&lt;br/&gt;
        diSocket := -1;&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;*&lt;/strong&gt;)&lt;br/&gt;
FUNCTION TcpClientOpenSocket : DINT&lt;br/&gt;
(&lt;em&gt;  Open TCP client socket to connect to server.&lt;br/&gt;
    Return: Socket-Id for connection session&lt;br/&gt;
&lt;/em&gt;)&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
    iPort:INT;                  (&lt;em&gt; Port number of TCP socket to open &lt;/em&gt;)&lt;br/&gt;
    stIPAddress:STRING;     (&lt;em&gt; IP-Address of server to connect to &lt;/em&gt;)&lt;br/&gt;
    diMaxDataSize:DINT;     (&lt;em&gt; Max size of data to transmitt; if size = 0 default values are used &lt;/em&gt;)&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
    diSocket:DINT;&lt;br/&gt;
    bOptNoDelay:BOOL;&lt;br/&gt;
    lOptLinger:SOCKET_LINGER;&lt;br/&gt;
    bResult:BOOL;&lt;br/&gt;
    sa:SOCKADDRESS;&lt;br/&gt;
END_VAR&lt;/p&gt;
&lt;p&gt;diSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, 0);&lt;/p&gt;
&lt;p&gt;IF diSocket &amp;lt;&amp;gt; SOCKET_INVALID THEN&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&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;diSocket&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_SOL&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_SO_SNDBUF&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;diMaxDataSize&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;diMaxDataSize&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&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;diSocket&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_SOL&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_SO_RCVBUF&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;diMaxDataSize&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;diMaxDataSize&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;lOptLinger&lt;/span&gt;.&lt;span class="nv"&gt;l_onoff&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;lOptLinger&lt;/span&gt;.&lt;span class="nv"&gt;l_linger&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;SysSockSetOption&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;diSocket&lt;/span&gt;,  &lt;span class="nv"&gt;SOCKET_SOL&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_SO_LINGER&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;lOptLinger&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;lOptLinger&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;bOptNoDelay&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&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;diSocket&lt;/span&gt;,  &lt;span class="nv"&gt;SOCKET_IPPROTO_TCP&lt;/span&gt;, &lt;span class="nv"&gt;SOCKET_TCP_NODELAY&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;bOptNoDelay&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;bOptNoDelay&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;sa&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;sa&lt;/span&gt;.&lt;span class="nv"&gt;sin_addr&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;GetIPAddress&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;stIPAddress&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;sa&lt;/span&gt;.&lt;span class="nv"&gt;sin_addr&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;SOCKET_INADDR_NONE&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
    &lt;span class="nv"&gt;sa&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;iPort&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;SysSockConnect&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;diSocket&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;sa&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;sa&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
        &lt;span class="nv"&gt;SysSockClose&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;diSocket&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;diSocket&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;SOCKET_INVALID&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;span class="k"&gt;ELSE&lt;/span&gt;
    &lt;span class="nv"&gt;SysSockClose&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;diSocket&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;diSocket&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;SOCKET_INVALID&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;END_IF&lt;br/&gt;
TcpClientOpenSocket:=diSocket;&lt;br/&gt;
(&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;*&lt;/strong&gt;)&lt;br/&gt;
FUNCTION TcpReceiveData : DINT&lt;br/&gt;
(&lt;em&gt;  Receive data from a tcp socket.&lt;br/&gt;
    Return: Number of bytes received&lt;br/&gt;
&lt;/em&gt;)&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
    diSocket:DINT;      (&lt;em&gt; Socket Id &lt;/em&gt;)&lt;br/&gt;
    pbyData:DWORD;      (&lt;em&gt; Address of data buffer &lt;/em&gt;)&lt;br/&gt;
    diDataSize:DINT;        (&lt;em&gt; Size of data to send &lt;/em&gt;)&lt;br/&gt;
    diTImeout : DINT;       (&lt;em&gt; Timeout in seconds &lt;/em&gt;)&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
    fdRead:SOCKET_FD_SET;&lt;br/&gt;
    tvTimeout:SOCKET_TIMEVAL;&lt;br/&gt;
    rr:DINT;&lt;/p&gt;
&lt;p&gt;END_VAR&lt;/p&gt;
&lt;p&gt;tvTimeout.tv_usec := 0;&lt;br/&gt;
fdRead.fd_count := 1;&lt;br/&gt;
fdRead.fd_array&lt;span&gt;[0]&lt;/span&gt; := diSocket;&lt;/p&gt;
&lt;p&gt;IF (SysSockSelect(SOCKET_FD_SETSIZE, ADR(fdRead), 0, 0, ADR(tvTimeout)) &amp;gt; 0) THEN&lt;br/&gt;
    TcpReceiveData:=SysSockRecv(diSocket, pbyData, diDataSize, 0);&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;*&lt;/strong&gt;)&lt;br/&gt;
FUNCTION TcpSendData : DINT&lt;br/&gt;
(&lt;em&gt;  Send data via TCP socket.&lt;br/&gt;
    Return: Number of bytes sent&lt;br/&gt;
&lt;/em&gt;)&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
    diSocket:DINT;      (&lt;em&gt; Socket Id &lt;/em&gt;)&lt;br/&gt;
    pbyData:DWORD;      (&lt;em&gt; Address of data buffer &lt;/em&gt;)&lt;br/&gt;
    diDataSize:DINT;        (&lt;em&gt; Size of data to send &lt;/em&gt;)&lt;br/&gt;
    diTImeout : DINT;       (&lt;em&gt; Timeout in seconds &lt;/em&gt;)&lt;br/&gt;
END_VAR&lt;br/&gt;
VAR&lt;br/&gt;
    fdWrite:SOCKET_FD_SET;&lt;br/&gt;
    tvTimeout:SOCKET_TIMEVAL;&lt;br/&gt;
END_VAR&lt;br/&gt;
tvTimeout.tv_sec := diTimeout ;&lt;br/&gt;
tvTimeout.tv_usec := 0;&lt;br/&gt;
fdWrite.fd_count := 1;&lt;br/&gt;
fdWrite.fd_array&lt;span&gt;[0]&lt;/span&gt; := diSocket;&lt;br/&gt;
IF (SysSockSelect(SOCKET_FD_SETSIZE, 0, ADR(fdWrite), 0, ADR(tvTimeout)) &amp;gt; 0) THEN&lt;br/&gt;
    TcpSendData:=SysSockSend(diSocket, pbyData, diDataSize, 0);&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;*&lt;/strong&gt;)&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>