• 1 Post
  • 10 Comments
Joined 2 years ago
cake
Cake day: June 3rd, 2023

help-circle



  • For me, the huge value-add of Discord is for gaming (and is what Discord was created for). In college, my friends and I were originally using Skype calls when we’d play League together, but it was super annoying; essentially in order to not have to create a new call and add everyone who happened to be playing every time we just had one giant call with everyone we’d “redial” when playing. The downside is that if you were on Skype but not part of the game (in class or something) you’d get the Skype call invitation and have to decline it.

    Switching to Discord was fantastic. We’d just have a persistent voice channel for different games, and you could chill in there to indicate it’s what you were playing or wanted to play, and if someone wanted to join they just jump on the call. It was also nice for organizing our text chats into different subjects (using different text channels), so if you were trying to ask if anyone had any advice for a certain class, you wouldn’t have your messages drowned out by people talking about news about a upcoming game. We just have a “games” text channels and a “classes” text channels and a “weekend plans” text channel, etc. This became particularly important as the server grew from friends to friends of friends and would’ve been overwhelming to have everyone stuck in one chat.

    That’s pretty much been the extent of my Discord use, and I’m continually amazed to hear how others have been using it. I’ve seen the “join us on Discord, X, Facebook, etc.” for different games coming out, but never thought much of it or ever considered doing that.








  • To me, the potential point of confusion is referring to “sent by Ctrl+D” and things “received by the end process” as synonymous, ignoring the tty driver in between. When you Ctrl+d, you send a magic byte value to the tty master (which I would refer to as a EOF character, but I understand the argument against the terminology). On the other side of it the process doesn’t receive this value, but instead has its read call returned even if the buffer is 0.

    A simple example hopefully highlighting the difference

    Window1:
    nc -nvlp 5555 #"far nc"
    
    Window2:
    nc -nv 127.0.0.1 5555 #"local NC"
    Hi there[Enter]
    Hi [Ctrl+D]There[Ctrl+D][Enter]
    
    Window3:
    strace -p [pid of local nc]
    
    Window2:
    [Right arrow][Right arrow][Ctrl+D]
    [Ctrl+D]Uh oh[Enter]
    

    What we see is pretty much as described. From the first line, we see “Hi there\n” on the other side. For the second line, we first see "Hi " appear, then “There” then “\n”.

    From the third line, in the strace we can see the sequences representing the right-arrow key, and we can see the tty driver on the far side takes those sequences and interprets them to render the cursor two characters to the right.

    The fourth line is where it gets more interesting. We send the tty driver the EOF byte, and the tty driver interprets this and gives the current active tty client a 0-byte return to read() and assumes we have no more data to send. But unlike bash, nc doesn’t care about a 0-byte read and is still looking for more data (as we can see in the strace). But if we continue to type and send more data (the “Uh oh”), we can see in the strace that the tty never sends this to the nc. So, to some definition, we’re still sending data to the local nc, but the tty driver isn’t actually relaying it