Code Monkey home page Code Monkey logo

Comments (2)

resistance22 avatar resistance22 commented on July 25, 2024 1

Dear @M0r13n Thanks for responding, I read the code and got a grasp of what's going on.

from pyais.

M0r13n avatar M0r13n commented on July 25, 2024

Hi @resistance22,

when there is no message incoming from UDPStream,TCPStream

I think there is a misunderstanding here. The two classes mentioned are simple wrappers around the socket API. As such, the two interfaces behave exactly like normal sockets. This means that you, as the designer, will have to decide what the rules of etiquette are for a conversation.

pyais will only ask the kernel to create a new socket and then try to connect to the remote socket. The connection will initially be terminated only under the following conditions:

  • the remote refuses to connect (wrong address, network error, etc)
  • the remote closes the connection (reboot, shutdown, error, etc)
  • the kernel closes the socket

It is important to note that the both classes provided by pyais are NOT closed if no data is transferred. This is normal behavior. For example, imagine that you are communicating with an AIS receiver that sends only a few messages. If the socket was simply closed when, for example, no messages were transmitted for 5 seconds, this would lead to errors.

But you can tell the socket to be closed explicitly:

import socket

from pyais.stream import TCPStream

url = 'localhost'
port = 12346

with TCPStream(url, port=port) as stream:
   # tell the socket to be closed if no message was received for 5 seconds
    stream._fobj.settimeout(5)
    try:
        for msg in stream:
            print(msg.decode())
    except socket.timeout:
        print("No message received for 5 seconds")

Regardless, I am planning to revise the included socket API of pyais again to give more flexibility to the programmer.

from pyais.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.